问题是,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);
}
}
你为什么要这样做? – DJClayworth 2011-02-16 14:38:16
@DJClayworth:你是否真的这么说:“你为什么要这样做,我可能会以另一种方式提出建议?”。它将帮助一些新的员工从头开始学习.NET和OO,这样他们就可以安全地对类进行修改,因为知道如果类定义不会改变,那么他们就可以从这个角度来看。我同意,断言/测试通常是矫枉过正的,但在这个例子中,已经决定这个级别的测试至少在短期内是有益的。在大多数情况下,这些测试只需要很短的时间就可以编写 – 2011-02-16 14:58:29