我试图创建一个通用类派生类,我想知道的差异“A类:B <C>”和“A类<T>:B <T>”之间的区别是什么?T:C“?
public class A<T> : B<T> where T : C
{
}
和
public class A: B<C>
{
}
A类里面什么之间有可能会没有代码,因为(现在)它不会有不同于B类的行为。我只想区分这两个类。
在此先感谢。
我试图创建一个通用类派生类,我想知道的差异“A类:B <C>”和“A类<T>:B <T>”之间的区别是什么?T:C“?
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.
而你的第二个代码是硬编码为具有对genric类型参数B使用C和不通用。
这是一个Constraints with generics in C#,样品:
在
public class A<T> : B<T> where T : C
{
}
通用T
必须为C
类型或它的一个子(什么是抽象)。
在
public class A: B<C>
{
}
通用为C
。
在第二个选项,您将结束与一个非通用类A
,而在第一个选项,你将有泛型类A
在第一个示例中,A
是一个通用类,类型为C
。它也继承C
类型的B
类。
你的第二个例子具有以下属性:
A
是不一个泛型类。它继承C
类型的B
类。
所以,他们实际上是完全不同的。
在第一个例子你在进行的A Class
作为一个通用类这是T
必须实例化类时给出。
A<C> instance = new A<C>();
在第二个例子中,该A Class
不是一个通用类,实例化A Class
时,因为没有必要宣布因为它的基础上,A Class
声明幕后自动完成T
。
A instance = new A();
另一个区别
如果你有给定层级继承树:
在第一个例子,当你实例化A
类,继承的每一个类可以用作T
。
在第二个例子中,你可以实例化A
类,并指定C2
类,所以只能从C2
继承的类可以insde的A
类中使用。