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 回答