我正在尝试从泛型类创建派生类,我想知道它们之间的区别是什么
public class A<T> : B<T> where T : C
{
}
和
public class A: B<C>
{
}
在A类中,可能没有代码,因为(现在)它的行为与B类不同。我只想区分这两个类。
提前致谢。
答案 0 :(得分:8)
说你有一个班级
public class D : C
{
}
然后在您的第一个示例中,以下内容有效。
var a = new A<D>
您可以使用最终从C。
派生的T
的任何类
虽然您的第二个代码是硬编码的,但B使用C作为genric类型参数且不是通用的。
答案 1 :(得分:2)
样本为Constraints with generics in C#:
在
public class A<T> : B<T> where T : C
{
}
通用T
必须是C
类型或其子类(什么是抽象)。
在
public class A: B<C>
{
}
通用名称为C
。
答案 2 :(得分:2)
在您的第一个示例中,A
是类型C
的通用类。它还继承自B
类型的C
类。
您的第二个示例具有以下属性:
A
不是通用类。它继承自B
类型的C
类。
所以,他们实际上是完全不同的。
答案 3 :(得分:1)
在第一个示例中,您将A Class
作为通用类,在实例化类时必须提供T
。
A<C> instance = new A<C>();
在第二个示例中,A Class
不是通用类,因为在实例化A Class
时,无需声明T
,因为它根据{{1}}声明在幕后自动完成。
A Class
另一个区别
如果您有给定的分层继承树:
在第一个示例中,当您实例化A instance = new A();
类时,每个继承的类都可以用作A
。
在第二个示例中,您可以实例化T
类并指定A
类,因此只能从C2
继承的类才能使用C2
类
答案 4 :(得分:0)
在第二个选项中,您最终会得到一个非泛型类A
,而在第一个选项中,您将拥有泛型类A