下面是一个简单的测试来演示这个问题:
class MyBase { public int Foo { get; set; } }
class MyClass : MyBase { }
[TestMethod]
public void TestPropertyCompare()
{
var prop1 = typeof(MyBase).GetProperty("Foo");
var prop2 = typeof(MyClass).GetProperty("Foo");
Assert.IsTrue(prop1 == prop2); // fails
//Assert.IsTrue(prop1.Equals(prop2)); // also fails
}
我需要一个比较方法来确定这两个属性实际上是表示同一个属性。正确的方法是什么?
特别是,我想检查属性是否实际上来自基类,并且没有以任何方式改变,如重写(使用override int Foo
),隐藏(使用new int Foo
)属性,接口属性(即在派生类ISome.Foo
中显式实现)或任何其他方式导致在使用instanceOfDerived.Foo
时不调用MyBase.Foo
。
1条答案
按热度按时间irlmq6kh1#
ReflectedType
总是返回你进行反射的类型。另一方面,DeclaringType
告诉你属性实际声明在哪个类型上。所以你需要做的是:使用方法: