在閱讀泛型時,我遇到了這兩個代碼塊,我在想它們是否相同?在C#泛型是這兩行代碼是否相同?
public abstract class Search<T, TCollection, TCriteria>
where TCollection : Collection<Name>
where T : Name
AND:
public abstract class Search<Name, Collection<Name>, TCriteria>
在閱讀泛型時,我遇到了這兩個代碼塊,我在想它們是否相同?在C#泛型是這兩行代碼是否相同?
public abstract class Search<T, TCollection, TCriteria>
where TCollection : Collection<Name>
where T : Name
AND:
public abstract class Search<Name, Collection<Name>, TCriteria>
正如Lasse指出的,你的第二個版本不能編譯。如果你把它改成
public abstract class Search<Name, Collection, TCriteria>
它會編譯,但它不會做你想要它做的事情:這只是規定了一個名爲Name
,Collection
和TCriteria
三類參數的泛型類。但它並不以任何方式限制它們,因此您可以創建一個像Search<int, long, ulong>
這樣的實例。
類型參數通常以T
開頭,但該語言不以任何方式強制執行。
所以區別在於第二個版本不起作用,使用第一個版本。
沒有,因爲在第二要指定一個具體的泛型參數,但在第一個您指定的泛型參數可以在指定的類型的任何子類where子句。
此外,由於濫用'Collectio
第二個看起來不像我有效的代碼。 – wRAR 2011-06-04 10:55:03