3

匿名型の値にアクセスするために、コンパイラは getter メソッドを作成するのはなぜですか? 読み取り専用のバッキング フィールドに直接アクセスできるようにする方が簡単ではないでしょうか?

4

2 に答える 2

3

匿名型のプロパティは、構築後に読み取り専用になるためです。オブジェクトが作成されると、それらを変更することはできません。

get only プロパティを使用してこれを実現できますが、パブリック フィールドを使用することはできません (フィールドはいつでも変更できます)。


編集:私は周りを見回しましたが、パブリック読み取り専用フィールドを使用しなかった理由について明確な理由を見つけることができませんでした. ただし、私の最善の推測、プロパティを持つことができるようにすることです

パブリック フィールドを公開し、プロパティを持たない場合、必然的に、WPF バインディングなどのパブリック プロパティを探すものは、匿名型を使用できなくなります。したがって、プライベートな読み取り専用のバッキング フィールドを持つプロパティを持つことは、おそらくより安全な選択でした。

于 2013-11-11T08:38:17.200 に答える
1

彼らが単に読み取り専用プロパティを使用しない理由は明らかではありませんが、正当な理由は次のとおりです。

読み取り専用プロパティを使用しただけの場合は、その名前を知っているので、リフレクションを使用して簡単に変更できます。

それらはプライベート バッキング フィールドを生成するため、その名前を知ることははるかに難しく (生成された IL を検査する必要があります)、したがって、リフレクションを使用してそれを変更する可能性ははるかに低くなります。もちろん、それでもできますが、そうする前に一度か二度考えてしまうほど、明らかに奇妙なことです。

于 2013-11-11T09:01:57.467 に答える