0

同様の質問を見つけることができなかったのは奇妙ですが、これは実際に私が望むものであり、派生クラスのすべての親クラスを見つけます。

私はそれが私のために働くことを願ってコードをテストしました:

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{}

基本的に、ここでの主な目的は、派生クラスが何らかの形で基本階層のどこかで基本クラスを継承しているかどうかを確認することです。

ただし、このコードは null を返し、インターフェイスでのみ機能します。

4

1 に答える 1

5

他のすべてのタイプは実際には必要ないように思えます-必要なのはType.IsSubclassOforだけですType.IsAssignableFrom。ただし、階層内のすべての型を取得するのは簡単Type.BaseTypeです:

public static IEnumerable<Type> GetClassHierarchy(Type type)
{
    while (type != null)
    {
        yield return type;
        type = type.BaseType;
    }
}
于 2013-07-29T22:30:33.763 に答える