一.域的概念
C#中域是指成員變數和方法,在OOP程式設計中(物件導向程式設計)我們要求使用者只知道類是幹什麼的,而不許知道如何完成的,或者說不允許訪問類的內部,對於有必要在類外可見的域,我們用屬性來表達,所以說屬性可以看成是域的擴充套件。我們通過操作訪問器來操作屬性,進而達到對私有域的操作。
二.訪問器
屬性的訪問器包含有助於獲取(讀取或計算) 或設定(寫入)屬性的可執行語句,訪問器申明可以包含一個get訪問器,一個set訪問器,或者同時包含兩者。例如:
// 宣告型別為 string 的 Code 屬性 public string Code { get { return code; } set { code = value; } } // 宣告型別為 string 的 Name 屬性 public string Name { get { return name; } set { name = value; } } // 宣告型別為 int 的 Age 屬性 public int Age { get { return age; } set { age = value; } }
例項
下面的例項展示了屬性的用法:
using System; namespace runoob { class Student { private string code = "N.A"; private string name = "not known"; private int age = 0; // 宣告型別為 string 的 Code 屬性 public string Code { get { return code; } set { code = value; } } // 宣告型別為 string 的 Name 屬性 public string Name { get { return name; } set { name = value; } } // 宣告型別為 int 的 Age 屬性 public int Age { get { return age; } set { age = value; } } public override string ToString() { return "Code = " + Code +", Name = " + Name + ", Age = " + Age; } } class ExampleDemo { public static void Main() { // 建立一個新的 Student 物件 Student s = new Student(); // 設定 student 的 code、name 和 age s.Code = "001"; s.Name = "Zara"; s.Age = 9; Console.WriteLine("Student Info: {0}", s); // 增加年齡 s.Age += 1; Console.WriteLine("Student Info: {0}", s); Console.ReadKey(); } } }
三.抽象屬性
抽象類可以擁有抽象屬性,在子類中被實現,下面程式說明了這點:
using System; namespace runoob { public abstract class Person { public abstract string Name { get; set; } public abstract int Age { get; set; } } class Student : Person { private string code = "N.A"; private string name = "N.A"; private int age = 0; // 宣告型別為 string 的 Code 屬性 public string Code { get { return code; } set { code = value; } } // 宣告型別為 string 的 Name 屬性 public override string Name { get { return name; } set { name = value; } } // 宣告型別為 int 的 Age 屬性 public override int Age { get { return age; } set { age = value; } } public override string ToString() { return "Code = " + Code +", Name = " + Name + ", Age = " + Age; } } class ExampleDemo { public static void Main() { // 建立一個新的 Student 物件 Student s = new Student(); // 設定 student 的 code、name 和 age s.Code = "001"; s.Name = "Zara"; s.Age = 9; Console.WriteLine("Student Info:- {0}", s); // 增加年齡 s.Age += 1; Console.WriteLine("Student Info:- {0}", s); Console.ReadKey(); } } }
四.自動屬性
從C#3.0開始,C#引入了自動屬性的概念,以下兩種程式碼是等效的:
public class Student { public string Name { get; set; } }
public class Student { private string name; // This is the so-called "backing field" public string Name // This is your property { get {return name;} set {name = value;} } }