《隨筆四》——C#中的 “屬性和索引器中的 get 和 set 訪問器的訪問修飾符”
阿新 • • 發佈:2018-12-20
屬性和索引器中的 get 和 set 訪問器的訪問修飾符
● 索引器和屬性自帶 get 和 set 訪問器, 在預設的情況下: 如果一個屬性有public 訪問級別, 那麼它的那個兩個訪問器都有同樣的訪問級別。 索引器也一樣。
● 不過我們也可以為兩個訪問器分配不同的訪問級別。
下面看一個示例程式:
namespace Ch05Ex03 { class Persion { public string Name { get; // 預設設定為public的, 因為該屬性是public的 private set; //把set設定為 私有的訪問級別,這樣在外面就不能設定訪問器了 } public Persion(string name) { Name = name; // 只能在類的內部設定該屬性了,這裡用建構函式設定 } public void SetValue(string _name) { Name = _name; //也可以用公有的成員函式設定 } } class Program { static void Main(string[] args) { Persion p = new Persion("Capt.Ernest Evans"); WriteLine($"先輸出名字是:{p.Name}"); // p.Name = "huangh"; //不可以在類外設定set訪問器,因為該訪問器是私有 p.SetValue("huangchengtao"); // 通過類的公有函式設定set訪問器 WriteLine($"\n在先輸出名字是:{p.Name}"); ReadKey(); } } } 輸出結果為: 先輸出名字是:Capt.Ernest Evans 在先輸出名字是:huangchengtao
注意: 在這段程式碼中,儘管可以在類的外部讀取該屬性,但卻只能在類的內部設定它, 既可以是類的建構函式、也可以是其它的成員函式。 這是一個非常重要的封裝工具。
● 訪問器的訪問修飾符有幾個限制, 需要重要注意的有:
屬性或索引器既有get訪問器又有set訪問器時, 其訪問器才能有訪問修飾符。
雖然兩個訪問器都必須出現,但是隻能有一個訪問器能有訪問修飾符。
訪問器的訪問修飾符必須比 屬性或索引器 的訪問級別 有更嚴格的訪問級別。
比如說: 如果一個屬性的訪問級別是public的,那麼其中一個訪問器的訪問級別可以是protected、private、internal。
如果說屬性的訪問級別是private, 那麼訪問器的修飾符是private的。