簡體   English   中英

Basetype的BaseType

[英]BaseType of a Basetype

這是我在這里的第一個問題,所以我希望我能夠很好地表達出來,並希望它不會太令人頭疼。

我有以下類SubSim擴展了Sim ,它擴展了MainSim 在一個完全獨立的類(和庫)中,我需要檢查傳遞的對象是否是一種MainSim 所以要做以下檢查;

Type t = GetType(sim);
//in this case, sim = SubSim
if (t != null)
{
  return t.BaseType == typeof(MainSim);
}

顯然t.BaseType將返回Sim,因為Type.BaseType獲取當前Type直接繼承的類型。

除了必須執行t.BaseType.BaseType以獲取MainSub之外 ,還有其他方法可以使用.NET庫獲取正確的類型嗎? 或者是否有可以重新定義以返回主類的覆蓋?

先感謝您

有4種相關的標准方式:

sim is MainSim;
(sim as MainSim) != null;
sim.GetType().IsSubclassOf(typeof(MainSim));
typeof(MainSim).IsAssignableFrom(sim.GetType());

您還可以創建遞歸方法:

bool IsMainSimType(Type t)
 { if (t == typeof(MainSim)) return true;   
   if (t == typeof(object) ) return false;
   return IsMainSimType(t.BaseType);
 }
if (sim is MainSim)

是你所需要的全部。 “是”查找繼承樹。

使用is關鍵字

return t is MainSim;

'是'選項對我不起作用。 它給了我警告; “給定的表達式永遠不會是提供的('MainSim')類型”,但我確實相信,警告更多地與我們現有的框架有關。 我的解決方案最終成為:

return t.BaseType == typeof(MainSim) || t.BaseType.IsSubclassof(typeof(MainSim));

不像我希望的那樣干凈,或者像你的答案那樣直截了當。 無論如何,謝謝大家的答案。 它們的簡單性讓我意識到我需要學習很多東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM