屬性的訪問器包含與獲取或設(shè)置屬性有關(guān)的可執(zhí)行語句。訪問器聲明可以包含 get 訪問器或 set 訪問器,或者兩者均包含。聲明采用下列形式之一:
get {} set {}
get 訪問器:
get 訪問器體與方法體相似。它必須返回屬性類型的值。執(zhí)行 get 訪問器相當(dāng)于讀取字段的值。
以下是返回私有字段 name 的值的 get 訪問器:
private string name; // the name field public string Name // the Name property { get { return name; } }
當(dāng)引用屬性時(shí),除非該屬性為賦值目標(biāo),否則將調(diào)用 get 訪問器讀取該屬性的值。
例如:
Employee e1 = new Employee(); ... Console.Write(e1.Name); // The get accessor is invoked here
get 訪問器必須在 return 或 throw 語句中終止,并且控制不能超出訪問器體。
set 訪問器:
set 訪問器與返回 void 的方法類似。它使用稱為 value 的隱式參數(shù),此參數(shù)的類型是屬性的類型。
在下例中,set 訪問器被添加到 Name 屬性:
public string Name { get { return name; } set { name = value; } }
當(dāng)對屬性賦值時(shí),該操作將調(diào)用 set 訪問器。
例如:
e1.Name = "Joe"; // The set accessor is invoked here
在 set 訪問器中對局部變量聲明使用隱式參數(shù)名 (value) 是錯(cuò)誤的。
備注:
屬性按如下方式,根據(jù)所使用的訪問器進(jìn)行分類:
只帶有 get 訪問器的屬性稱為只讀屬性。無法對只讀屬性賦值。
只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標(biāo)外,無法對其進(jìn)行引用。
同時(shí)帶有 get 和 set 訪問器的屬性為讀寫屬性。
在屬性聲明中,get 和 set 訪問器都必須在屬性體的內(nèi)部聲明。
使用 get 訪問器更改對象的狀態(tài)是一種錯(cuò)誤的編程樣式。
我們通過下面的例子來認(rèn)識(shí)什么是訪問器:
using System; namespace AccessorEG { public class Student { // 私有字段 private field private int _age; // 公開的屬性 public property public int Age { get { return _age; } set { _age = value; } } } class Program { static void Main(string[] args) { Student stu = new Student(); stu.Age = 10; // 使用了修改 Console.WriteLine(stu.Age.ToString()); //使用了讀取 輸出 10 Console.ReadKey(); } } }
很好理解,訪問器就是指對象類型成員對外界的接口,就是使對象類型成員與外界進(jìn)行信息交互的橋梁,有了訪問器,外界就能對對象成員進(jìn)行讀、寫的對應(yīng)操作。
那么,什么成員能夠擁有訪問器呢?非只讀的字段和事件是可以聲明訪問器的。當(dāng)然,只讀域也能提供被外界獲取的接口,即get,但是只能在聲明或構(gòu)造函數(shù)中初始化,而且它并不支持提供set方法。
using System; namespace AccessorEG { public class Student { // 私有字段 private field private readonly int _age = 10; // 公開的屬性 public property public int Age { get { return _age; } } } class Program { static void Main(string[] args) { Student stu = new Student(); Console.WriteLine(stu.Age.ToString()); // 使用了讀取 輸出 10 Console.ReadKey(); } } }
上述代碼中只讀域的值在聲明時(shí)就已經(jīng)賦了,而它對應(yīng)公開屬性的訪問器中也不能提供set方法,不然會(huì)無法通過編譯,但是它可以被外界取得。
關(guān)于字段的訪問器我們還要說一些,常見的有以下寫法:
using System; namespace AccessorEG { public class Student { #region 全訪問權(quán)限 // 私有字段 private int _age; // 與_age對應(yīng)的公開屬性,包含了set和get方法 public int Age { get { return _age; } set { _age = value; } } // 如果您安裝了.NET3.0,那么您可以使用自動(dòng)屬性,屆時(shí),上面的代碼即可以下面的代替 // 在VS.NET下輸入 prop 連擊兩下Tab鍵,編譯器會(huì)自動(dòng)幫您生成自動(dòng)屬性 // public int Age { get; set; } #endregion // 全訪問權(quán)限 #region 只讀屬性 private string _name; public string Name { get { return _name; } } // 等同于 // public string Name { private set; get; } #endregion #region 只寫屬性 private bool _sex; public bool Sex { set { _sex = value; } } // 等同于 // public bool Sex { set; private get; } #endregion } class Program { static void Main(string[] args) { Student stu = new Student(); stu.Age = 18; // stu.Name = "Johness"; 異常,編譯錯(cuò)誤,因?yàn)樵搶傩灾蛔x // Console.WriteLine(stu.Sex.ToString()); 異常,編譯錯(cuò)誤,因?yàn)樵搶傩灾粚? Console.WriteLine(stu.Age.ToString()); // 使用了讀取 Console.ReadKey(); // 輸出 18 } } }
以上示例中的只讀、只寫僅對外界有效,如果您顯示得制定了該訪問器的所有者,即類的私有字段。那么在類的內(nèi)部,您仍可以方便的使用您定義的私有字段進(jìn)行讀寫操作,因此,我建議朋友們定義字段及其訪問器使用.NET2.0的語法而不用3.0的新語法(自動(dòng)屬性)。當(dāng)然,利用訪問器也能更好地對數(shù)據(jù)有效性進(jìn)行驗(yàn)證:
using System; namespace AccessorEG { public class Student { // 私有字段 private int _age; // 與_age對應(yīng)的公開屬性,包含了set和get方法 public int Age { get { return _age; } // 利用訪問器對輸入的年齡進(jìn)行驗(yàn)證 // 如果輸入值小于0或者大于100 // 可以賦為默認(rèn)值18或者不進(jìn)行操作 set { if (value >= 0 && value <= 100) _age = value; // 如果數(shù)據(jù)無效不進(jìn)行操作可以注釋以下內(nèi)容 else _age = 18; } } } class Program { static void Main(string[] args) { Student stu = new Student(); stu.Age = -2; // 賦無效值 Console.WriteLine(stu.Age.ToString()); Console.ReadKey(); // 輸出 18 } } }

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)