欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#中判斷類是否繼承于泛型基類

 更新時(shí)間:2022年04月14日 08:11:15   作者:j4587698  
這篇文章主要介紹了c#中判斷類是否繼承于泛型基類,最簡(jiǎn)單的辦法肯定是typeof(b).baseType=typeof(a<string>)這樣就可以返回true,但是這種方法時(shí)不妥的,下面看看如何解決這個(gè)問(wèn)題呢

在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)文章

  • C#編程和Visual Studio使用技巧(下)

    C#編程和Visual Studio使用技巧(下)

    本文將介紹10個(gè)C#編程和Visual Studio IDE使用技巧,這也是近期我們發(fā)布的系列文章的下篇。
    2015-10-10
  • C#操作字符串方法總結(jié)實(shí)例代碼

    C#操作字符串方法總結(jié)實(shí)例代碼

    這篇文章主要介紹了C#操作字符串方法總結(jié)實(shí)例代碼,需要的朋友可以參考下
    2017-10-10
  • C#異步調(diào)用實(shí)例小結(jié)

    C#異步調(diào)用實(shí)例小結(jié)

    這篇文章主要介紹了C#異步調(diào)用的方法,實(shí)例分析了C#同步調(diào)用及異步調(diào)用的常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • Unity3D實(shí)現(xiàn)漸變顏色效果

    Unity3D實(shí)現(xiàn)漸變顏色效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)漸變顏色效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • WPF實(shí)現(xiàn)頁(yè)面的切換的示例代碼

    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-01
  • C#?使用Aspose.Cells?導(dǎo)出Excel的步驟及問(wèn)題記錄

    C#?使用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-01
  • C# TreeView無(wú)限目錄樹(shù)實(shí)現(xiàn)方法

    C# 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 這種顯示的解決思路

    淺談C#手機(jī)號(hào)換成111XXXX1111 這種顯示的解決思路

    下面小編就為大家?guī)?lái)一篇淺談C#手機(jī)號(hào)換成111XXXX1111 這種顯示的解決思路。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • WPF實(shí)現(xiàn)上下滾動(dòng)字幕效果

    WPF實(shí)現(xiàn)上下滾動(dòng)字幕效果

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)上下滾動(dòng)字幕效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法

    C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#利用XML創(chuàng)建Excel文檔的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-08-08

最新評(píng)論