c# - 为什么非泛型派生类型必须为泛型基类 C# 指定类型参数

标签 c# .net generics

在 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/

相关文章:

c# - 双向保存的流畅 nhibernate 映射

c# - 在哪里可以找到 ASP.NET MVC 插件模式的介绍?

javascript - typescript 类型 : array of T to map

scala - 为什么不能推断泛型函数的参数类型?

java - 没有参数的方法泛型

c# - 比较两个不同长度的整数数组时提高性能

c# - 使用 Moq,我如何模拟带有 out 参数的 protected 方法?

C# In() 方法? (像 SQL)

.net - Visual Studio 自动替换引用的程序集

c# - IQueryable for entities .Where(属性在本地数组中)