2013-07-29 46 views
0

奇怪的是,我無法找到類似的問題,但這實際上是我想要的,查找派生類的所有父類。如何獲得C#中派生類的所有父類反射

我測試了代碼,是希望它爲我的作品:

void WriteInterfaces() 
{ 
    var derivedClass = new DerivedClass(); 
    var type = derivedClass.GetType(); 
    var interfaces = type.FindInterfaces((objectType, criteria) => 
              objectType.Name == criteria.ToString(),"BaseClass"); 

    foreach(var face in interfaces) 
    { 
     face.Name.Dump(); 
    } 
} 

interface BaseInterface 
{} 

class BaseClass : BaseInterface {} 

class BaseClass2 : BaseClass {} 

class DerivedClass : BaseClass2{} 

基本上,我在這裏的主要目的是檢查是否派生類莫名其妙地在其基礎層次的地方繼承的基類。

但是,此代碼返回空值,僅適用於接口。

+0

你的要求是有點怪怪的(也許我誤解)..但派生類將始終以繼承一個基類,是在它的層次結構的某個地方。這就是爲什麼它的「派生」.. –

回答

5

聽起來好像你不需要需要所有其他類型 - 你只需要Type.IsSubclassOfType.IsAssignableFrom。然而,讓所有類型的層次結構是很容易使用Type.BaseType

public static IEnumerable<Type> GetClassHierarchy(Type type) 
{ 
    while (type != null) 
    { 
     yield return type; 
     type = type.BaseType; 
    } 
} 
+0

我想,「甜蜜,充滿疑問的擁抱」對你來說太過分了:P –

+0

現在確定它是有道理的。感謝你的回答。標記爲答案。 – Tarik