How to use reflection to determine if a class locally implements an interface?
问题在于type.getInterfaces()返回类实现的所有接口,这包括由继承的基类定义/实现的任何接口。当我试图找出一个类在本地引用/实现的接口时,我遇到了一些问题(所以不包括基类中引用/定义的任何接口)。
我想做类似于type.get properties()的事情,它可以接受bindingFlags,因此下面的代码将获取在被引用的类型内声明的所有公共/私有属性(并且排除在基类中声明的所有属性)。
1 | type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly) |
我尝试过以下操作,但失败的原因是".declaringType"始终为空。
1 2 3 4 5 6 7 | foreach (var implementedInterface in type.GetInterfaces()) { if (implementedInterface.DeclaringType == type) { locallyDefinedInterfaces.Add(implementedInterface); } } |
你能不在与它填充在defines collection接口。然后,for each from the starting一级你的目标类的接口derives that that get from,从你的列表类implements,As You Go除尘。重复,直到你有rinse -没有更多的类。无论是在你的列表保持你原来要实现接口的类solely模式。P></
备注:可能有更好的方式,做好好of this,this is just a建议。P></
看这里:P></
http:/ / / / / www.clariusconsulting.net blogs馆2010年12 kzu / / / / howtoinspectatypeinheritancetreeproperly.aspx 03P></
这是丹尼尔cazzulino灿烂后备用。P></
the reason is that is probably declared空型,因为它是空的……(declared since the interface is not within any type)。只是安InsightP></
用how about to the to check if the班社
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class Program { static void Main(string[] args) { MyClass c = new MyClass(); MyClass1 c2 = new MyClass1(); var b = c is IInterface; Console.WriteLine(b); //False Console.WriteLine(c2 is IInterface); //True Console.ReadKey(); } } class MyClass { } class MyClass1 : IInterface { } interface IInterface { } |