int MyProperty { set; }
プロパティにセッターのみを使用するためのアイデアは何ですか?1つのプロパティに何らかの値を設定すると、ある時点でこの値を読み取る可能性が非常に高くなると思いますか?
基本クラス ライブラリでは書き込み専用プロパティはまれですが、XmlReaderSettings.XmlResolverはその一例です。そのトピックのセキュリティ ノートに基づいて、部分的に信頼されたコードが既定のリゾルバーにアクセスしたり改ざんしたりするのを防ぐために、get アクセサーが省略されたと思います。
XmlResolver.CredentialsとXmlTextReader.XmlResolverは、同じ理由でおそらく書き込み専用のプロパティです。
(奇妙なことに、XmlAttribute.InnerTextも書き込み専用のプロパティですが、これは適切な設計ではないようです。)
上記の例に従って、読み取り/書き込みプロパティが意味をなさない場合にのみ、書き込み専用プロパティを使用する必要がありますが、セキュリティ上の理由から get アクセサーは必要ありません。
もちろん、Set
代わりにメソッドを使用することもできますが、プロパティには、一般的に で行われるように、オブジェクト初期化子で使用できるという利点がありますXmlReaderSettings
。
セッターだけで自動プロパティを使用することは、あまり意味がありません。セッターのみを使用して手動で実装されたプロパティを使用することは理にかなっています。セッターは、内部で使用されるフィールドを設定できますが、外部では表示されません。
set onlyプロパティを持つことは非常にまれであり、set-onlyプロパティはほとんどの開発者にとって予期されない動作であるため、プロパティの代わりにsetメソッドを使用して実装されることがよくあります。
実際、自動実装されたプロパティが。set
なしでを定義するのはコンパイラエラーですget
。セット専用プロパティは手動で定義する必要があります。
通常、このようなプロパティは作成しません。おっしゃるとおり、たいした価値はありません。
特定の値を読み取らずに設定のみを許可したい場合は、メソッドを提供します。それはよりきれいです。
コードがコンパイルされたとしても、メソッドは「書き込み専用プロパティ」よりもはるかに意味があります。書き込み専用プロパティに関する興味深い議論がここにあります