【发布时间】:2019-02-11 15:03:28
【问题描述】:
好的,因为我最初的问题似乎有点模棱两可,因为我问的是关于 C# 语言的一般性问题,但是展示了我遇到问题的特定示例的一部分,我将尝试重写以便更清楚地表明我的问题是关于 C# 语言,而不是关于我的特定问题。
我目前有一个类的属性(实际上是几个),根据您是通过代码直接访问它们还是使用反射来返回不同的值。这就是我使用 VS 的即时控制台访问该属性时发生的情况:
> SelectedLine.QtyOutstanding
0
> var prop = SelectedLine.GetType().GetProperty("QtyOutstanding")
> prop.GetValue(SelectedLine)
8
无论属性是如何定义的,在 C# 中,两种访问属性的方式有什么区别? 如果有的话,他们不应该在 setter/getter 中运行完全相同的代码吗?
(考虑到 GetType() 返回的类型与声明的变量相同)
【问题讨论】:
-
QtyOutstanding 是如何定义的?是字段还是属性?
-
@IllusiveBrian 显然是一个属性,因为
GetProperty(...).GetValue(...)返回了一些东西。否则 OP 将获得 NRE。我的猜测是某些线程正在更改属性值。 -
@IllusiveBrian 我添加了一个小例子来说明它是如何定义的。如您所见,它没有什么特别之处:/
-
@HimBromBeere 这是我的第一个想法(某些东西正在改变属性的值)但是,无论我访问该属性多少次,使用反射总是返回正确的值,并访问该属性没有。
-
请阅读How to Ask 并创建一个minimal reproducible example。发生了一些你没有向我们展示的事情,而且很难准确猜测它是什么。