[C#] 欄位(Field)和屬性(Property)

  • 691
  • 0

C# 的欄位(Field)和屬性(Property) 

身為一個物件導向的初學者,最近才知道自己不懂 field 和 property。
以前在 coding 的時候,都直接使用了 field ,因為打字快速,使用又方便。


欄位(Field)
通常使用 private 修飾詞,可用 readonly 修飾詞設定成唯讀,表示 class 的狀態訊息。
換句話說,欄位不能使用 virtual, override, sealed, abstract 等修飾詞,
因此子類別繼承時,直接繼承欄位。

屬性(Property)
通常定義為 public ,透過 get 和 set 來控制外部的存取及修改,來達到對屬性的封裝。
屬性可在子類別繼承後,再視需要做變化。

範例:

public class Student
{
    private string _firstName;
    private string _lastName;
    private int _id;

    public int StudentId
    {
        get { return _id; }
        set
        {
            if (value > 0) 
                _id = value;
        }
    }

    public string StudentName
    {
        get { return _firstName; }
        set
        {
            if (string.IsNullOrEmpty(value))
                throw new ArgumentOutOfRangeException("Student name error !");
            _firstName = value; 
                
        }
    }
}

在 Student 這個類別中,有 3 個 field 和 2 個 property ,
外部在使用時,只會看到 StudentId 和 StudentName 這兩個 public property。


若是將 field 的修飾設為 public ,不論是誰都可以任意修改這個 field,
那就失去了物件封裝的意義了。