2013-10-04 89 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類中使用。

相關問題