2013-05-25 12 views
10

我正在學習C#,並且正在學習如何使字段專用於類,並使用Getters和Setter來公開方法而不是字段值。速記訪問器和變異器

是1和方法2相當於get; set;方法?例如是另一個的簡寫嗎?

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

啊,所以你的意思是我可以做一些類似於'protected set {if(mark <= maxMark)mark = value/maxMark * 100; }'??? – Gravy

+0

是的,這是正確的。 – Robin

+2

請注意,名稱getter/setter將不會返回/設置專用字符串名稱,而是一個您無法直接訪問的內部變量。 – Bikonja

7

是的,Method2是當你有自定義getter和setter函數時要走的路。默認情況下,當您使用Method1時,將會有一個內部處理的默認私有屬性。請參閱URL瞭解更多詳情