关于c#:如何使用反射来确定一个类是否在本地实现了一个接口?

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班社 is of that is型。e.gP></

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
    {

    }