我很惊讶地看到我使用x.GetType().GetProperty("Foo")
获得的对象的实际类型不是System.Reflection.PropertyInfo
而是System.Reflection.RuntimePropertyInfo
。
我在msdn或其他地方看不到这种类型的文档。
我的实际问题从参考 - 比较两个属性增长。我从第三方库中收到一个属性,并将其与我在同一类型上使用.GetProperty("Foo")
获得的属性进行比较。我希望属性是同一个对象(它们看起来像#34; Locals"调试时的窗口中的相同属性),但它们不是(GetHashCode
结果不同)。所以,我认为它可以某种方式与属性对象的实际类型相关,即System.Reflection.RuntimePropertyInfo
。
什么是System.Reflection.RuntimePropertyInfo
?怎么比较呢?它的行为与通常的PropertyInfo
相同吗?
答案 0 :(得分:7)
RuntimePropertyInfo
是一个内部实现。它是PropertyInfo
,事实上,GetProperty
会返回PropertyInfo
(即使基础类型为RuntimePropertyInfo
)。
第三方lib可能会获得与您不同类型的属性吗?
new blah().GetType().GetProperty("Test") == new blah().GetType().GetProperty("Test")
返回true。
答案 1 :(得分:2)
PropertyInfo
是一个抽象类,而RuntimePropertyInfo
是PropertyInfo
的具体实现。
当我们致电Type.GetProperties()
或Type.GetProperty()
时,他们实际上会返回RuntimePropertyInfo
。
您获得引用不相等的原因可能是因为第三方库中的类型签名差异。