返回一个包含泛型List的类
本文关键字:包含 泛型 List 的类 一个 返回 | 更新日期: 2023-09-27 17:51:16
我试图在c#(5.0)中构建一个类,我可以使用它作为基类,它包含一个列表,但列表可以是2种不同的类型。我想做以下事情:
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;
}
重要的是,我要做的是返回从另一个类中的方法派生的类:
public BaseC PopulateMyDerivedClass()
{
BaseC b = new BaseC();
b.header = "stuff";
b.recs = FileHelperEngine<myclassB> fhe.ReadStringAsList(x);
}
方法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; }
}
Alexei Levenkov说得好:
通常注意:在这种情况下,DerivedX类将不像原始样本那样有共同的父类。如果需要将DerivedX视为具有公共父/接口,则可能需要添加更多的类层(作为BaseC的非泛型父类)或使用接口。
我觉得你的代码设计需要重新思考。首先,通常当我们谈论"多态性"时,我们通常谈论的是多态行为(方法),而不是成员。我认为你可能想要考虑两个实现一个接口的类,这个接口做所有你想让每个类做的事情(将数据解析成自己的列表类型,并根据你的需要对它进行操作)。
尽管如此,在不了解代码细节的情况下,我认为这样的东西可能是您想要实现的:
public class BaseC<T>
{
string header { get; set; }
public List<T> recs {get;set;}
}
和
public BaseC<T> PopulateClass<T>()
{
var b = new BaseC<T>();
b.recs = new List<T>();
T first = (T)Convert.ChangeType("1", typeof(T));
b.recs.Add(first);
return b;
}
和检查我们的理智:
BaseC<String> d1 = PopulateClass<String>();
System.Diagnostics.Debug.Print(d1.recs.First().ToString());
System.Diagnostics.Debug.Print(d1.recs.First().GetType().ToString());
BaseC<int> d2 = PopulateClass<int>();
System.Diagnostics.Debug.Print(d2.recs.First().ToString());
System.Diagnostics.Debug.Print(d2.recs.First().GetType().ToString());
打印
1
System.String
1
System.Int32