2010-02-01 17 views
3

在.NET 抽象類類型返回具體類型的對象。問題是,我不知道什麼類型將是運行時,但我知道從哪個抽象類派生(我使用抽象工廠創建適當的類)。獲得從其中一類使用的GetType函數導出

我如何得到實際的抽象類類型?它甚至有可能嗎?

+0

如果你「知道它從哪個抽象類派生,」爲什麼你需要得到抽象類?鑄造不是一個選擇? –

回答

12

Type.BaseType會告訴你從當前類型派生類型。您可以遞歸調用Type.BaseType,直到Type.IsAbstracttrue

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(); 
+0

+1爲「第一抽象父母」澄清。 –

+1

如果沒有找到ABC,它將更加符合其他'Type'方法返回'null'。 (例如'BaseType','GetNestedType','GetElementType'等)。 –

+0

@ 280Z28:好點。謝謝! – jason

0

我認爲你正在尋找BaseType屬性可Type類。這會得到您當前類型直接繼承的類型。

相關問題