2011-06-04 77 views
3

在閱讀泛型時,我遇到了這兩個代碼塊,我在想它們是否相同?在C#泛型是這兩行代碼是否相同?

public abstract class Search<T, TCollection, TCriteria> 
     where TCollection : Collection<Name> 
     where T : Name 

AND:

public abstract class Search<Name, Collection<Name>, TCriteria> 
+3

第二個看起來不像我有效的代碼。 – wRAR 2011-06-04 10:55:03

回答

1

正如Lasse指出的,你的第二個版本不能編譯。如果你把它改成

public abstract class Search<Name, Collection, TCriteria> 

它會編譯,但它不會做你想要它做的事情:這只是規定了一個名爲NameCollectionTCriteria三類參數的泛型類。但它並不以任何方式限制它們,因此您可以創建一個像Search<int, long, ulong>這樣的實例。

類型參數通常以T開頭,但該語言不以任何方式強制執行。

所以區別在於第二個版本不起作用,使用第一個版本。

5

沒有,因爲在第二要指定一個具體的泛型參數,但在第一個您指定的泛型參數可以在指定的類型的任何子類where子句。

+2

此外,由於濫用'Collectio ',該第二次聲明是非法的。 – 2011-06-04 10:59:58