我試圖創建一個通用類派生類,我想知道的差異「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
類中使用。