泛型類型參數(shù)約束 C#泛型函數(shù)獲取T類型名稱?
C#泛型函數(shù)獲取T類型名稱?如果t是從where t:A繼承的,如果t是從where t:B繼承的,那么在定義泛型類時(shí),您可以在實(shí)例化類時(shí)對(duì)客戶端代碼可用于類型參數(shù)的類型施加限制。如果客戶機(jī)代碼試圖用
C#泛型函數(shù)獲取T類型名稱?
如果t是從where t:A繼承的,如果t是從where t:B繼承的,那么在定義泛型類時(shí),您可以在實(shí)例化類時(shí)對(duì)客戶端代碼可用于類型參數(shù)的類型施加限制。如果客戶機(jī)代碼試圖用約束不允許的類型實(shí)例化類,則會(huì)發(fā)生編譯時(shí)錯(cuò)誤。這些約束稱為約束。使用where context關(guān)鍵字指定約束。下表列出了六種類型的約束:約束描述T:結(jié)構(gòu)類型參數(shù)必須是值類型。可以指定除nullable以外的任何值類型。有關(guān)詳細(xì)信息,請(qǐng)參閱使用可為null的類型(C#編程指南)。T:類類型參數(shù)必須是引用類型這一事實(shí)也適用于任何類、接口、委托或數(shù)組類型。T:new()類型參數(shù)必須具有不帶參數(shù)的公共構(gòu)造函數(shù)。與其他約束一起使用時(shí),必須最后指定new()約束。T:<基類名稱>類型參數(shù)必須是指定的基類或派生自指定的基類。T:< interface name>類型參數(shù)必須是指定的接口或?qū)崿F(xiàn)指定的接口??梢灾付ǘ鄠€(gè)接口約束。約束接口也可以是泛型的。T:u為T提供的類型參數(shù)必須是為u提供的參數(shù)或從為u提供的參數(shù)派生的參數(shù)。這稱為裸類型約束。//---------------------------------此外,由于所有泛型約束表達(dá)式都是“and”關(guān)系,因此不可能表示“or”關(guān)系,而且C#不支持多重繼承,因此從a或B繼承的所有者的要求無(wú)法實(shí)現(xiàn)。