3

为什么要访问匿名类型中的值,编译器会创建一个 getter 方法?直接访问只读支持字段不是更容易吗?

4

2 回答 2

3

因为匿名类型的属性在构造后是只读的。一旦创建了对象,您就无法更改它们。

他们可以使用仅获取属性来实现此目的,但不能使用公共字段(您始终可以更改字段)。


编辑:我环顾四周,但找不到一个明显的原因说明他们为什么不使用公共只读字段。但是,我最好的猜测是:这样你就可以拥有 properties

如果它们公开了公共字段并且没有任何属性,那么匿名类型将不可避免地无法被寻找公共属性的事物使用,例如 WPF 绑定。因此,拥有带有私有只读支持字段的属性可能是更安全的选择。

于 2013-11-11T08:38:17.200 回答
1

为什么他们不简单地使用只读属性并不明显,但一个很好的理由是:

如果他们只使用只读属性,您就会知道它的名称,因此很容易使用反射来更改它。

因为它们生成了一个私有的支持字段,所以很难知道它的名称是什么(您必须检查生成的 IL),因此您不太可能使用反射来更改它。当然,你仍然可以——但这显然是一件很奇怪的事情,你肯定会在这样做之前三思而后行。

于 2013-11-11T09:01:57.467 回答