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确实完全相同的两个derive1和derive2,只是它返回一个不同类型的列表.
我想我需要泛型.但是,这是在基类级别,PopulateMyDerivedClass然后应该返回通用?我想也许我不是在处理多态性问题,但是你可以猜测我是仿制药的新手,所以很挣扎.
我想你想要的是创建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的非泛型父级)或使用接口.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |