c#中判斷類是否繼承于泛型基類
在c#中,有時(shí)候我們會(huì)編寫(xiě)類似這樣的代碼:
public class a<T> { //具體類的實(shí)現(xiàn) } public class b : a<string>{}
如果b繼承a的類型不確定,這個(gè)時(shí)候我們是無(wú)法通過(guò)baseType來(lái)直接判斷b是否繼承于a的。
如果我們寫(xiě)如下代碼:
typeof(b).baseType == typeof(a)
返回值是false
。
因?yàn)?code>typeof(b).baseType返回的類型是a`1[System.String],而typeof(a<>)
返回的是a`1[T]。很明顯這兩個(gè)類型是不相等的。所以上面返回flase
也就是正常現(xiàn)象了。
那么如何解決這個(gè)問(wèn)題呢?
最簡(jiǎn)單的辦法肯定是typeof(b).baseType == typeof(a<string>)
這樣就可以返回true。
但是由于我們用了T,所以大概率我們是不知道進(jìn)來(lái)的類型的,所以這種方法不行。
另一種方法麻煩一點(diǎn)。
首先,我們把泛型類型轉(zhuǎn)換成泛型原型,然后再去比較泛型原型就可以了。
c#中提供了獲取泛型原型的方法GetGenericTypeDefinition()
,MSDN解釋如下:
返回一個(gè)表示可用于構(gòu)造當(dāng)前泛型類型的泛型類型定義的 Type 對(duì)象。
所以我們直接使用typeof(b).baseType.GetGenericTypeDefinition()
既可獲取a<>
。
這里需要注意的是GetGenericTypeDefinition()
在b不是泛型時(shí)會(huì)拋出異常,所以我們?cè)谑褂们皯?yīng)該判斷b是否是一個(gè)泛型類。
c#中同樣提供了這個(gè)方法IsGenericType
,MSDN解釋如下:
獲取一個(gè)值,該值指示當(dāng)前類型是否是泛型類型。
所以我們判斷一個(gè)類是否繼承于泛型基類的方法就是這樣的:
if (typeof(b).baseType.IsGenericType && typeof(b).baseType.GetGenericTypeDefinition() == typeof(a)){ // 這里是b繼承于a<T>的邏輯 }
到此這篇關(guān)于c#中判斷類是否繼承于泛型基類的文章就介紹到這了,更多相關(guān)c#判斷類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WPF實(shí)現(xiàn)頁(yè)面的切換的示例代碼
本文主要介紹了WPF實(shí)現(xiàn)頁(yè)面的切換的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01C#?使用Aspose.Cells?導(dǎo)出Excel的步驟及問(wèn)題記錄
Aspose.Cells是一款功能強(qiáng)大的Excel文檔處理和轉(zhuǎn)換控件,開(kāi)發(fā)人員和客戶電腦無(wú)需安裝Microsoft Excel也能在應(yīng)用程序中實(shí)現(xiàn)類似Excel的強(qiáng)大數(shù)據(jù)管理功能,對(duì)C#?使用Aspose.Cells?導(dǎo)出Excel的步驟及問(wèn)題記錄感興趣的朋友一起看看吧2022-01-01C# TreeView無(wú)限目錄樹(shù)實(shí)現(xiàn)方法
這篇文章主要介紹了C# TreeView無(wú)限目錄樹(shù)實(shí)現(xiàn)方法,實(shí)例分析了TreeView節(jié)點(diǎn)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06淺談C#手機(jī)號(hào)換成111XXXX1111 這種顯示的解決思路
下面小編就為大家?guī)?lái)一篇淺談C#手機(jī)號(hào)換成111XXXX1111 這種顯示的解決思路。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11WPF實(shí)現(xiàn)上下滾動(dòng)字幕效果
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)上下滾動(dòng)字幕效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法
這篇文章主要介紹了C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08