2010-04-01 126 views

回答

3

可以使用Type.BaseType從頂級類型遍歷到最基類型,直到基類型達到object

事情是這樣的:

abstract class A { } 
class B : A { } 
class C : B { } 

public static void Main(string[] args) 
{ 
    var target = typeof(C); 

    var baseTypeNames = GetBaseTypes(target).Select(t => t.Name).ToArray(); 

    Console.WriteLine(String.Join(" : ", baseTypeNames)); 
} 

private static IEnumerable<Type> GetBaseTypes(Type target) 
{ 
    do 
    { 
     yield return target.BaseType; 

     target = target.BaseType; 
    } while (target != typeof(object)); 
} 
0

我用這個代碼來獲得一個繼承的類型定義的所有類。它搜索所有加載的程序集。有用的,如果你只有基類,你會得到擴展基類的所有類。

Type[] GetTypes(Type itemType) { 
    List<Type> tList = new List<Type>(); 
    Assembly[] appAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 
    foreach (Assembly a in appAssemblies) { 
     Module[] mod = a.GetModules(); 
     foreach (Module m in mod) { 
      Type[] types = m.GetTypes(); 
      foreach (Type t in types) { 
       try { 
        if (t == itemType || t.IsSubclassOf(itemType)) { 
         tList.Add(t); 
        } 
       } 
       catch (NullReferenceException) { } 
      } 
     } 
    } 
    return tList.ToArray(); 
} 
相關問題