【发布时间】:2014-06-03 18:54:08
【问题描述】:
我将如何设置以下类,以便我可以拥有一个采用公共父类/接口并允许我在不指定泛型类型的情况下迭代任何子类的方法?
public abstract class BaseClass
{ ??? }
public class ChildClass<T> : BaseClass
{
public List<T> SomeList;
???
}
ChildClass<int> childA = new ChildClass<int> ();
ChildClass<string> childB = new ChildClass<string> ();
public void IterateOverChild (BaseClass someChildClass)
{
foreach (var element in someChildClass.SomeList)
{
Console.WriteLine (element);
}
}
【问题讨论】:
-
你不能用正常的方式
-
BaseClass 不知道 ChildClass 上存在的任何属性。为什么不使 BaseClass 通用?换句话说——看起来你可以更好地抽象你想做的事情。
-
泛型 BaseClass 的问题是你不能在没有泛型的代码中引用它。例如,您必须拥有
void IterateOverChild<T>(BaseClass<T> someChildClass)。在很多情况下,您需要一个非泛型基类,因为泛型类型不可用。
标签: c# class generics foreach ienumerable