我有一个问题,我需要列出与该类无关的所有接口? - 例如:
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等类相关的所有接口。)
有人帮我吗?
提前致谢
答案 0 :(得分: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
的接口,因为它是...... public。
这可能不符合您的确切需求,但如果没有真正的代码和真实的预期结果,很难给出更好的答案。
修改强>
使用递归和您的示例,在控制台应用程序中:
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);
}
}