C# では、次のようなことができます。
private string _myField;
public string MyProperty
{
get { return _myField; }
private set { _myField = value; }
}
必要に応じてクラス内で設定できる一方で、ここでプロパティでプライベート セッターを使用する利点は何_myField
ですか? のセッターを使用する必要があるのはなぜMyProperty
ですか?
C# では、次のようなことができます。
private string _myField;
public string MyProperty
{
get { return _myField; }
private set { _myField = value; }
}
必要に応じてクラス内で設定できる一方で、ここでプロパティでプライベート セッターを使用する利点は何_myField
ですか? のセッターを使用する必要があるのはなぜMyProperty
ですか?
セッターは、プロパティが更新されるときに他の動作/ロジックを実装できるため、プロパティが更新される可能性のあるすべての場所で手動で実装する必要はありません。
できる:
例えば:
private string _myField;
private int _myField_num_updated;
private DateTime _myField_updated_at;
public string MyProperty
{
get { return _myField; }
private set {
_myField = value;
_myField_num_updated++;
_myField_updated_at = DateTime.Now;
}
}
プロパティ アクセサー (get
およびset
) を使用する目的は、特定の値のクエリまたは変更方法に関する内部実装を隠すことです。あなたの場合、セッターは単純ですが、将来的にはより複雑になる可能性があります。実装を非表示にすることで、潜在的な変更の影響を最小限に抑え、インターフェイスをシンプルに保ちます。
あなたの質問について:なぜプライベートセッターを使うのですか?プライベート セッターを使用する理由は、一般的にセッターを使用する理由とまったく同じです。プライベート セッターの場合、そのセッターのユーザーはクラス自体のコードです。パブリック セッターの場合、ユーザーはクラスを使用するすべての人である可能性があります。セッターを使用する利点は変わりません。
多くの場合、プロパティはバッキング フィールドをラップしていますが、そうしなければならない理由はありません。プロパティは、カスタム ビジネス ロジック (通常は何らかの検証または変換) を実装し、他の関数を呼び出すこともできます。プライベート セッターを使用すると、コードがより慣用的になり (つまり、他の人があなたのしていることをより容易に理解できるようになります)、より表現力豊かになります (つまり、コードは、達成しようとしているもののセマンティクスをより厳密に反映する、または反映する必要があります。プライベート セッターもこのカスタム ロジックをカプセル化できるようにすることで、ロジックが変更された場合やコードのリファクタリングが必要になった場合に変更する必要がある場所が 1 か所だけになるようにします。
セッターを使用すると、値を設定しようとするときに値を制御できます。たとえば、10 を超える値がないことを確認したい int がある場合などです。
public int MyProp
{
get { return _my_prop;}
private set {
if value > 10 {
_my_prop = 10;
}
}
}
プロパティは、主に 2 つの目的に役立ちます。
個人的な設定に関しては、最初の項目はあまり意味がありませんが、2 番目の項目はまだ有効です