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

