[英]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.