1. 程式人生 > >《隨筆四》——C#中的 “屬性和索引器中的 get 和 set 訪問器的訪問修飾符”

《隨筆四》——C#中的 “屬性和索引器中的 get 和 set 訪問器的訪問修飾符”

屬性和索引器中的 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的。