在 Andrew Tolson 的 Pro C# 中,作者说当非泛型类扩展泛型基类时,派生类必须指定类型参数。
// Assume you have created a custom
// generic list class.
public class MyList<T>
{
private List<T> listOfData = new List<T>();
}
// Non-generic classes must specify the type
// parameter when deriving from a
// generic base class.
public class MyStringList : MyList<string>
{}
我不明白为什么这是必要的?
最佳答案
否则它不是可用类型,因为 CLR 仍然不知道要为 T
使用哪种类型.
List<T>
是一个开放类型因为T
尚未被可实例化类型替代。而且您不能创建开放类型的实例。您只能在关闭 时创建类型的实例,即当其所有类型参数(包括封闭类型和基类型)已被可实例化类型替换时。
如果你能申报 class MyTList : MyList<T> { }
, 那么您将永远无法为 T
指定类型,因为 MyTList
不再包含该类型参数,因此您永远无法实例化 MyTList
.那不会是一个非常有用的类。
关于c# - 为什么非泛型派生类型必须为泛型基类 C# 指定类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14584438/