2013-05-25 10 views
10

私はC#を学んでおり、フィールドをクラスにプライベートにすることについて学び、GettersとSettersを使用してフィールド値の代わりにメソッドを公開します。略語アクセサーと突然変異子

get; set;のメソッド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; } 
    } 
} 
+0

[この回答を見てください(http://stackoverflow.com/questions/15454470/why-arent-simple-properties-optimized-to-fields/15454538#15454538)。それは何かを詳細に示しています。 –

+0

の可能な複製[Cの自動プロパティとは何ですか?その目的は何ですか?](http://stackoverflow.com/questions/6001917/what-are-automatic-properties-in-c-sharp-and-what-is -their-purpose) –

答えて

8

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

+1

Aahなので、 'protected set {if(mark <= maxMark)mark = value/maxMark * 100;}のようなことができます。 } '??? – Gravy

+0

はい、それは正しいです。 – Robin

+2

Nameゲッター/セッターはプライベート文字列名を返すことはなく、直接アクセスすることのできない内部変数を返す/設定することに注意してください。 – Bikonja

7

はい、Method2は、カスタムゲッターとセッター機能があるときに行く方法です。 Method1を使用すると、既定では内部的に処理される既定のプライベートプロパティが存在します。詳細については、URLを参照してください。