C#入門--字段與屬性
“字段”,它是包含在類或結構中的對象或值。字段使類和結構可以封裝數據。
屬性是這樣的成員:它們提供靈活的機制來讀取、編寫或計算私有字段的值。可以像使用公共數據成員一樣使用屬性,但實際上它們是稱為“訪問器”的特殊方法。這使得數據在可被輕松訪問的同時,仍能提供方法的安全性和靈活性。
public class Program { private int _number; //_number為字段 public int Number //Number 為屬性 { get { return _number ;} set { _number = value ;} } }
從上面的例子可以明顯看出,字段就是變量,而屬性就是字段的訪問方式(通常字段是private,屬性是public),這類似於C++,申明一個private 類型的變量x,通過 GetX()與SetX()函數來對x進行操作。而這裡的屬性就是將這兩個函數合在一起通過set與get關鍵字對相應的字段進行處理。
屬性的出現,極大的簡化了我們的編碼工作。與C++和Java比較一下,你會發現我們不必為了一個字段而專門寫兩個函數(雖然這些函數很簡單),而且使得代碼編的更簡潔,更易讀,更易改。
當然,屬性也可對字段進行一些處理(例如返回字段時判斷其是否為空,對字段進行賦值時判斷value是否有效等簡單或者其它更復雜的操作)。也可以設置屬性的訪問權限(如只讀,只寫,可讀可寫,不可讀不可寫)。而且現在的C#版本已經支持自動屬性,即不必為屬性指定字段,如 public int Number {get;set;} 這樣就可以申明一個屬性,編譯器會為其自動分配一個字段(編譯時),總之通過屬性,可以極大的簡化我們的操作,使得代碼的可讀性更高,可維護性更高。下面讓我們通過一些例子來深入理解屬性的作用。
public class Program { private static string _number; public static string Number //非自動屬性,可讀可寫 { get { if (_number == null) return Convert.ToString(new NullReferenceException()); return _number; } set { string temp = ""; foreach (var ch in value) { if (char.IsDigit(ch)) temp += ch; } _number = temp; } } public static string ReadWrite { get; set; } //自動屬性,可讀可寫 public static string ReadOnly { get { return "0000"; }} //自動屬性,只讀 private static string _writeOnly; public static string WriteOnly { set { _writeOnly = value; } } //非自動屬性,只寫 public static void Main(string[] args) { Number = "23kljk3j423903kj43kj432kj"; ReadWrite = "ReadWrite"; //ReadOnly = "ReadOnly"; //報錯,此屬性只讀 WriteOnly = "WriteOnly"; Console.WriteLine(Number); Console.WriteLine(ReadWrite); Console.WriteLine(ReadOnly); //Console.WriteLine(WriteOnly); //報錯,此屬性只寫 Console.ReadKey(); } } //Results: //23342390343432 //ReadWrite //0000