C#中屬性的解析

  • 2019 年 10 月 3 日
  • 筆記

一.域的概念

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;}      }  }