在.NET 抽象類類型返回具體類型的對象。問題是,我不知道什麼類型將是運行時,但我知道從哪個抽象類派生(我使用抽象工廠創建適當的類)。獲得從其中一類使用的GetType函數導出
我如何得到實際的抽象類類型?它甚至有可能嗎?
在.NET 抽象類類型返回具體類型的對象。問題是,我不知道什麼類型將是運行時,但我知道從哪個抽象類派生(我使用抽象工廠創建適當的類)。獲得從其中一類使用的GetType函數導出
我如何得到實際的抽象類類型?它甚至有可能嗎?
Type.BaseType
會告訴你從當前類型派生類型。您可以遞歸調用Type.BaseType
,直到Type.IsAbstract
爲true
。
static class TypeExtensions {
public static Type GetFirstAbstractBaseType(this Type type) {
if (type == null) {
throw new ArgumentNullException("type");
}
Type baseType = type.BaseType;
if (baseType == null || baseType.IsAbstract) {
return baseType;
}
return baseType.GetFirstAbstractBaseType();
}
用法:
Type abstractBase = typeof(Derived).GetFirstAbstractBaseType();
+1爲「第一抽象父母」澄清。 –
如果沒有找到ABC,它將更加符合其他'Type'方法返回'null'。 (例如'BaseType','GetNestedType','GetElementType'等)。 –
@ 280Z28:好點。謝謝! – jason
我認爲你正在尋找BaseType屬性可Type類。這會得到您當前類型直接繼承的類型。
如果你「知道它從哪個抽象類派生,」爲什麼你需要得到抽象類?鑄造不是一個選擇? –