我正在尝试从泛型类创建派生类,我想知道它们之间有什么区别
public class A<T> : B<T> where T : C
{
}
和
public class A: B<C>
{
}
在 A 类内部可能没有代码,因为(目前)它的行为与 B 类没有什么不同。我只想区分这两个类。
提前致谢。
假设你有一堂课
public class D : C
{
}
然后在您的第一个示例中,以下内容有效。
var a = new A<D>
您可以使用任何T最终派生自 C 的类。
而您的第二个代码被硬编码为让 B 使用 C 作为通用类型参数并且不是通用的。
它是C# 中带有泛型的约束,例如:
在
public class A<T> : B<T> where T : C
{
}
泛型T必须是它的C类型或子对象(什么是抽象)。
在
public class A: B<C>
{
}
通用的是C.
在您的第一个示例中,A是一个泛型类,类型为C。它也继承自Btype 类C。
您的第二个示例具有以下属性:
A不是泛型类。它继承自Btype 的类C。
因此,它们实际上是完全不同的。
在第一个示例中,您将设为实例化类时必须给出A Class 的泛型类。T
A<C> instance = new A<C>();
在第二个示例中, TheA Class 不是泛型类,因为在实例化时A Class不需要声明,T因为它根据声明在幕后自动完成A Class。
A instance = new A();
另一个区别
如果您有给定的分层继承树:

在第一个示例中,当您实例化A类时,每个继承的类都可以用作T.
在第二个示例中,您可以实例化A类并指定C2类,因此只能在类中C2使用继承自的A类。
在第二个选项中,您将得到一个非泛型类A,而在第一个选项中,您将拥有一个泛型类A