interface<T> where T : class
public interface iSend<T> where T : class
是什麼上面的代碼是什麼意思?
爲什麼要使用它?
何時使用?
interface<T> where T : class
public interface iSend<T> where T : class
是什麼上面的代碼是什麼意思?
爲什麼要使用它?
何時使用?
檢查我的全文後在這裏:Constrain on custom generic type探討不同類型的通用約束的
它參考類型約束
約束確保類型參數是引用類型。即類,接口,代表,陣列等等
interface iSend<T> where T : class
例
Valid InValid
A<MyClass> A<int>
A<InterfaceME> A<float>
A<float[]>
注: 總是首先施加多個約束時。
從docs:
約束類型參數
當你定義一個泛型類,你可以申請限制應用到各種客戶端代碼可以使用類型的參數,它的類型實例化你的類。如果客戶端代碼嘗試使用約束不允許的類型實例化您的類,則結果是編譯時錯誤。這些限制稱爲約束。
...
where T : class
:type參數必須是引用類型;這也適用於任何類,接口,委託或數組類型。
如果使用此約束,那麼T
必須是引用類型(並且沒有值類型)。
你這樣做,例如能夠使用null
,因爲引用類型可以是null
,而值類型不能。
有被稱爲泛型類型的約束。
上面的代碼意味着,你有一個通用接口iSend
並且只需要一個引用類型的類型參數
當你想限制類型參數iSend
是引用類型
爲什麼要使用它?以及何時使用此? –
@MARKANDBhatt我沒有適用於接口的示例,有些情況下,您可能想約束到引用類型:當您依賴於ReferenceEquals,使用弱引用時,或者當您想要執行一個原子讀取或寫入複雜類型。它也可能是一個簡短的說,泛型類型的變量應該能夠爲空。 – Theraot
你應該閱讀關於c#中的泛型而不是質疑它。這裏是關於MSDN的文章http://msdn.microsoft.com/en-us/library/512aeb7t.aspx – Sarrus
另請參閱:[在C#中,代表什麼](http://stackoverflow.com/questions/9857180/what -does-t -in-in-c-sharp) –
Theraot