问题是 Type.GetInterfaces()返回类实现的所有接口,包括由继承的基类定义/实现的所有接口。当我试图找出类本地引用/实现的接口时,我遇到了问题(因此不包括在基类中引用/定义的任何接口)。
我想做类似 type.GetProperties()的操作,可以使用 BindingFlags ,因此以下代码将获取在其中声明的所有公共/私有属性被引用的类型(并且排除了在基类中声明的所有属性)。
type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)
我已尝试过以下操作,但由于“.DeclaringType”始终为空而失败。
foreach (var implementedInterface in type.GetInterfaces())
{
if (implementedInterface.DeclaringType == type)
{
locallyDefinedInterfaces.Add(implementedInterface);
}
}
答案 0 :(得分:2)
您是否可以使用它定义的所有接口填充集合。然后,对于从目标类派生的每个类开始的每个类,获取 类实现的所有接口,随时从列表中删除。重复和冲洗,直到你没有更多的基类。您的列表中剩余的是接口,仅由您的原始类实现。
注意:可能有更好的方法,这只是一个建议。
答案 1 :(得分:1)
看这里:
这是辉煌的Daniel Cazzulino的帖子。
答案 2 :(得分:0)
声明类型为null的原因可能是因为它为null ...(因为接口未在任何类型中声明)。只是一个见解
答案 3 :(得分:-1)
如何使用 is
运算符检查类是否属于该类型。
例如
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
{
}