我正在尝试从泛型类创建派生类,我想知道它们之间有什么区别
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
。它也继承自B
type 类C
。
您的第二个示例具有以下属性:
A
不是泛型类。它继承自B
type 的类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