我正在尝试从一个通用类中创建派生类,想知道以下两种方式之间的区别:
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>
您可以使用任何继承自C的类作为T
。
而您的第二段代码硬编码了B使用C作为通用类型参数,不是通用的。
A
是一个类型为C
的通用类。它还继承了类型为C
的类B
。A
不是一个通用类。它继承了类型为C
的类B
。public class A<T> : B<T> where T : C
{
}
泛型的 T
必须是一个 C
类型或其子类(即抽象类型)。
在
public class A: B<C>
{
}
C
。A Class
成为一个通用类,必须在实例化类时给定 T
。A<C> instance = new A<C>();
A Class
不是一个泛型类,因为在实例化A Class
时无需声明T
,因为它会根据A Class
的声明自动完成。A instance = new A();
另一个不同之处
如果您有给定的继承层次树:
在第一个示例中,当您实例化A
类时,每个继承类都可以用作T
。
在第二个示例中,您可以实例化A
类并指定C2
类,因此只有从C2
继承的类可以在A
类中使用。
A
,而在第一个选项中,您将拥有泛型类A
。