0

問題があります。クラスに関連するすべてのインターフェースをリストする必要がありますか? – 例:

class Test : interface1
{
    public int var1;

    classA obj1;
    classB obj2;
    classC obj3;
}

class classA: interface2
{
    testclass obj;
}

class classB: interface3
{
}

class classC: interface4
{
}

class testclass: testinterface
{ 
   myinterface objInterface;
}
interface myinterface{}

私の質問は、クラス Test のすべてのインターフェースをどのようにリストするかです (クラス ex:.interface1、interface2 などに関連するすべてのインターフェースを返す必要があります)。

誰か助けてください。

前もって感謝します

4

1 に答える 1

1

現在のコード (ほとんど公開されていない、プロパティではなくフィールドなど) を使用すると、次のようなことができます。

var type = typeof(Test);
var interfaces = type.GetInterfaces().ToList();
interfaces.AddRange(type.GetFields(BindingFlags.NonPublic|BindingFlags.Instance)
     .SelectMany(x => x.FieldType.GetInterfaces()));

これは のインターフェイスを取得しませんpublic int var1。公開されているためです。

これはおそらくあなたの正確なニーズに合わないでしょうが、実際のコードと実際に期待される結果がなければ、より良い答えを出すことは非常に困難です.

編集

再帰とサンプルを使用して、コンソール アプリで:

private static void Main()
 {
     var type = typeof(Test);
     var interfaces = type.GetInterfaces().ToList();
     GetRecursiveInterfaces(type, ref interfaces);

 }

 private static IList<Type> GetFieldsType(Type type)
 {
     return type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Select(m => m.FieldType).ToList();
 }

 private static void GetRecursiveInterfaces(Type type, ref List<Type> interfaces)
 {
     foreach (var innerType in GetFieldsType(type))
     {
         interfaces.AddRange(innerType.IsInterface 
                             ? new[] { innerType } 
                             : innerType.GetInterfaces());
         GetRecursiveInterfaces(innerType, ref interfaces);
     }
 }
于 2012-10-18T09:55:42.883 に答える