为什么Getter采用匿名类型?

时间:2013-11-11 08:31:15

标签: c# .net clr anonymous-types

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

2 个答案:

答案 0 :(得分:3)

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

他们可以使用get only属性实现此目的,但不能使用公共字段(您可以随时更改字段)。


编辑:我环顾四周,但找不到一个明显的原因,为什么他们没有公共只读字段。但是,我最好的猜测是:,以便您可以拥有属性

如果他们暴露了公共领域,并且没有任何属性,则不可避免地,匿名类型将无法用于寻找公共属性的东西,例如: WPF绑定。因此,拥有私有只读备用字段的属性可能是更安全的选择。

答案 1 :(得分:1)

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

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

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