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,
那就失去了物件封裝的意義了。