2013-10-04 155 views

回答

8

你在你的第一次有一类

public class D : C 
{ 
} 

然后下面的例子是有效的。

var a = new A<D> 

您可以使用任何类T是最终从C.

衍生

而你的第二个代码是硬编码为具有对genric类型参数B使用C和不通用。

2

这是一个Constraints with generics in C#,样品:

public class A<T> : B<T> where T : C 
{ 
} 

通用T必须为C类型或它的一个子(什么是抽象)。

public class A: B<C> 
{ 
} 

通用为C

0

在第二个选项,您将结束与一个非通用类A,而在第一个选项,你将有泛型类A

2

在第一个示例中,A是一个通用类,类型为C。它也继承C类型的B类。

你的第二个例子具有以下属性:

A一个泛型类。它继承C类型的B类。

所以,他们实际上是完全不同的。

1

在第一个例子你在进行的A Class作为一个通用类这是T必须实例化类时给出。

A<C> instance = new A<C>(); 

在第二个例子中,该A Class不是一个通用类,实例化A Class时,因为没有必要宣布因为它的基础上,A Class声明幕后自动完成T

A instance = new A(); 

另一个区别

如果你有给定层级继承树:

enter image description here

在第一个例子,当你实例化A类,继承的每一个类可以用作T

在第二个例子中,你可以实例化A类,并指定C2类,所以只能从C2继承的类可以insde的A类中使用。

相关问题