web-dev-qa-db-ja.com

省略形のアクセサーとミューテーター

私はC#を学習しており、フィールドをクラスにプライベートにして、ゲッターとセッターを使用してフィールド値の代わりにメソッドを公開する方法を学習しています。

get; set; in 方法1方法2は同等ですか?例えば一方は他方の省略表現ですか?

class Student
{
    // Instance fields
    private string name;
    private int mark;

    // Method 1
    public string Name { get; set; }

    // Method 2
    public int Mark
    {
        get { return mark; }
        set { mark = value; }
    }
}

最後に、たとえば値を取得または設定する前に計算を実行する場合、方法2を使用しますか?例えば値をパーセンテージに変換するか、検証を実行しますか?例えば.

class Student
{
    // Instance fields
    private string name;
    private double mark;
    private int maxMark = 50;

    // Method 1
    public string Name { get; set; }

    // Method 2
    public double Mark
    {
        get { return mark; }
        set { if ( mark <= maxMark ) mark = value / maxMark * 100; }
    }
}
17
Gravy

はい、方法1は方法2へのショートカットです。デフォルトで方法1を使用することをお勧めします。さらに機能が必要な場合は、方法2を使用します。getおよびsetに異なるアクセス修飾子を指定することもできます。

11
Robin

はい Method2は、カスタムのゲッターおよびセッター関数がある場合の方法です。 Method1を使用する場合、デフォルトでは、内部で処理されるデフォルトのプライベートプロパティがあります。詳細については、これを参照してください [〜#〜] url [〜#〜]

サンプル:

string _name;

public string Name 
{
    get => _name;
    set => _name = value;
}
15
Saravanan