返回包含泛型List的类

PBM*_*eIt 2 c# generics polymorphism

我正在尝试在c#(5.0)中构建一个我可以用作基类的类,它包含一个List,但List可以是两种不同的类型.我想做以下事情:

public class BaseC
{
    string header { get; set; }
    List<object> recs  { get; set; }
}

public class derive1: BaseC
{
    List<myclassA> recs;
}

public class derive2: BaseC
{
    List<myclassB> recs;
}
Run Code Online (Sandbox Code Playgroud)

而且重要的是我想要做的是从另一个类中的方法返回派生类:

public BaseC PopulateMyDerivedClass()
{
    BaseC b = new BaseC();
    b.header = "stuff";
    b.recs =  FileHelperEngine<myclassB> fhe.ReadStringAsList(x);
}
Run Code Online (Sandbox Code Playgroud)

主要的一点是这个方法PopulateMyDerivedClass确实完全相同的两个derive1derive2,只是它返回一个不同类型的列表.

我想我需要泛型.但是,这是在基类级别,PopulateMyDerivedClass然后应该返回通用?我想也许我不是在处理多态性问题,但是你可以猜测我是仿制药的新手,所以很挣扎.

clc*_*cto 5

我想你想要的是创建BaseC泛型类并在定义派生类时指定泛型:

public class BaseC<T>
{
   //...
   virtual List<T> Recs { get; set; }
}

public class Derived1 : Base<MyClassA>
{
    override List<MyClassA> Recs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

阿列克谢·莱文科夫的好点:

通常的注意事项:在这种情况下,DerivedX类不会像原始样本那样拥有共同的父类.如果需要将DerivedX视为具有公共父/接口,则可能需要添加更多层类(作为BaseC的非泛型父级)或使用接口.

  • +1.通常注意:在这种情况下,`DerivedX`类不会与原始样本不同.可能需要添加更多层类(作为`BaseC <T>`的非泛型父类)或者如果需要将`DerivedX`视为具有公共父/接口,则使用接口. (2认同)