什么是System.Reflection.RuntimePropertyInfo以及如何比较它?

时间:2016-04-22 16:04:31

标签: c# .net reflection

我很惊讶地看到我使用x.GetType().GetProperty("Foo")获得的对象的实际类型不是System.Reflection.PropertyInfo而是System.Reflection.RuntimePropertyInfo

我在msdn或其他地方看不到这种类型的文档。

我的实际问题从参考 - 比较两个属性增长。我从第三方库中收到一个属性,并将其与我在同一类型上使用.GetProperty("Foo")获得的属性进行比较。我希望属性是同一个对象(它们看起来像#34; Locals"调试时的窗口中的相同属性),但它们不是(GetHashCode结果不同)。所以,我认为它可以某种方式与属性对象的实际类型相关,即System.Reflection.RuntimePropertyInfo

什么是System.Reflection.RuntimePropertyInfo?怎么比较呢?它的行为与通常的PropertyInfo相同吗?

2 个答案:

答案 0 :(得分:7)

RuntimePropertyInfo是一个内部实现。它是PropertyInfo,事实上,GetProperty会返回PropertyInfo(即使基础类型为RuntimePropertyInfo)。

第三方lib可能会获得与您不同类型的属性吗?

new blah().GetType().GetProperty("Test") == new blah().GetType().GetProperty("Test")

返回true。

答案 1 :(得分:2)

PropertyInfo是一个抽象类,而RuntimePropertyInfoPropertyInfo的具体实现。

当我们致电Type.GetProperties()Type.GetProperty()时,他们实际上会返回RuntimePropertyInfo

您获得引用不相等的原因可能是因为第三方库中的类型签名差异。