为什么要访问匿名类型的值,编译器会创建一个getter方法?直接访问只读后备字段会不会更容易?
答案 0 :(得分:3)
因为匿名类型的属性在构造之后是只读的。创建对象后,您无法更改它们。
他们可以使用get only属性实现此目的,但不能使用公共字段(您可以随时更改字段)。
如果他们暴露了公共领域,并且没有任何属性,则不可避免地,匿名类型将无法用于寻找公共属性的东西,例如: WPF绑定。因此,拥有私有只读备用字段的属性可能是更安全的选择。
答案 1 :(得分:1)
为什么他们不仅仅使用只读属性并不明显,但有一个很好的理由:
如果他们只使用了只读属性,你就会知道它的名字,因此很容易用反射来改变它。
因为它们会生成私有支持字段,所以很难知道它的名称是什么(您必须检查生成的IL),因此您不太可能使用反射来更改它。当然,你仍然可以 - 但这样做显然是一件非常奇怪的事情,你肯定会在这样做之前思考一两次。