C# では、全体的なプロパティとは異なるアクセス レベル (アクセス修飾子を参照) を持つゲッターとセッターを使用できます。これが一番多いパターン
public class FooObject
{
public String Foo
{
get;
private set;
}
}
これにより、FooObject をインスタンス化するオブジェクトは、Foo の値を取得できますが、その値を設定することはできません。セッターのプライベート修飾子は、FooObject 自体のみがこの機能を持っていることを示します (リフレクションの使用は含まれません)。
これには 2 つの利点があります。
自動プロパティ (変数に get 値と set 値を割り当てる必要がない) を追加すると、変数を明示的に作成しなくても、プロパティ変数 (コンパイル時に作成されます) のプライベート設定を行うことができます。これがないと、get 関数と set 関数を常にすべてパブリックにする、すべてプライベートにするなどしない限り、自動プロパティを使用できません。
抽象化のレベルが可能になるため、パブリック、プライベート、またはその他のすべてのメソッドがプロパティを通過し、プライベート変数に直接アクセスすることはありません。詳細については、この質問を参照してください。
インスタンスでは、他のオブジェクトがセッション ファクトリ値を設定できますが、それを継承するクラスだけがそれを取得できます。ほとんどの場合、オブジェクトが値を設定できる場合は、それを取得することもできますが、許可しない方が有益な場合もあります。これが許可されるのは、set イベントでは、プロパティ全体に対して定義された量よりも多くのアクセスが許可されないためです。
私が考えることができる最も良い例は、set イベントで、set オブジェクトが変更された場合です。たとえば、設定イベントが接続オブジェクトの設定であり、設定イベントで接続文字列が追加され、データベースへの接続が開かれた場合 (私の例では、このように動作しないようにコードをリファクタリングするでしょう) 、しかし、そのようなことが起こる可能性があります)。