6

C# では、次のようなことができます。

private string _myField;

public string MyProperty
{
    get { return _myField; }
    private set { _myField = value; }
}

必要に応じてクラス内で設定できる一方で、ここでプロパティでプライベート セッターを使用する利点は何_myFieldですか? のセッターを使用する必要があるのはなぜMyPropertyですか?

4

6 に答える 6

7

セッターは、プロパティが更新されるときに他の動作/ロジックを実装できるため、プロパティが更新される可能性のあるすべての場所で手動で実装する必要はありません。

できる:

  • 他のフィールドを自動的に更新する
  • 新しい値を検証します (たとえば、電子メール アドレスが正規表現と一致することを確認します)。
  • フィールドが更新されるたびに実行する必要があるコードを 1 か所に保持するには

例えば:

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;
    }
}
于 2012-08-18T00:48:49.870 に答える
5

プロパティ アクセサー (getおよびset) を使用する目的は、特定の値のクエリまたは変更方法に関する内部実装を隠すことです。あなたの場合、セッターは単純ですが、将来的にはより複雑になる可能性があります。実装を非表示にすることで、潜在的な変更の影響を最小限に抑え、インターフェイスをシンプルに保ちます。

あなたの質問について:なぜプライベートセッターを使うのですか?プライベート セッターを使用する理由は、一般的にセッターを使用する理由とまったく同じです。プライベート セッターの場合、そのセッターのユーザーはクラス自体のコードです。パブリック セッターの場合、ユーザーはクラスを使用するすべての人である可能性があります。セッターを使用する利点は変わりません。

于 2012-08-18T00:54:55.090 に答える
3

多くの場合、プロパティはバッキング フィールドをラップしていますが、そうしなければならない理由はありません。プロパティは、カスタム ビジネス ロジック (通常は何らかの検証または変換) を実装し、他の関数を呼び出すこともできます。プライベート セッターを使用すると、コードがより慣用的になり (つまり、他の人があなたのしていることをより容易に理解できるようになります)、より表現力豊かになります (つまり、コードは、達成しようとしているもののセマンティクスをより厳密に反映する、または反映する必要があります。プライベート セッターもこのカスタム ロジックをカプセル化できるようにすることで、ロジックが変更された場合やコードのリファクタリングが必要になった場合に変更する必要がある場所が 1 か所だけになるようにします。

于 2012-08-18T00:54:49.537 に答える
2

セッターを使用すると、値を設定しようとするときに値を制御できます。たとえば、10 を超える値がないことを確認したい int がある場合などです。

public int MyProp 
{
    get { return _my_prop;}
    private set {
        if value > 10 {
            _my_prop = 10;
        }

    }
}
于 2012-08-18T00:53:33.047 に答える
1

プロパティは、主に 2 つの目的に役立ちます。

  • 基になるフィールドへの外部からの予期しないアクセスを回避する
  • 基になるフィールドの実装の詳細を非表示にするため、インターフェイスを保持している限り、実装を自由に変更できます。

個人的な設定に関しては、最初の項目はあまり意味がありませんが、2 番目の項目はまだ有効です

于 2012-08-18T00:58:23.403 に答える