在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>
{}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是必要的?
因为否则它不是可用类型,因为CLR仍然不知道要使用哪种类型T.
List<T>是一个开放类型,因为T尚未用可实例化的类型替换.而且您无法创建开放类型的实例.您只能在关闭时创建类型的实例,即当所有类型参数(包括封闭类型和基类型)已被实例化类型替换时.
如果你能够声明class MyTList : MyList<T> { },那么你永远不可能指定一个类型T,因为MyTList不再包含那个类型参数,因此你永远不能实例化MyTList.这不是一个非常有用的课程.
如果您没有指定类型,那么唯一的另一个选择是使派生类也是通用的.
public class MyDerivedList<T> : MyList<T>
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |