c#屬性get、set不同訪問權限寫法

雖然知道這麼用,但一直沒用過,等到用的時候發現不會寫了,查了好久才找到~~~。

【轉載】原來屬性的Get和Set訪問器還可以這樣用

以前記得論壇有過一個帖子是專門討論C#中屬性的用處的
今天翻閱《C#高級編程》的時候又發現一條
C#允許給屬性的get和set訪問器設置不同的訪問修飾符,所以屬性可以有公共的get訪問器和私有的或者是受保護的set訪問器。這有助於控制屬性的設置方式或者時間。
可惜的是書上給的例子完全錯了,就是很普通的屬性設置

程序代碼:
public string Name
{
     get { return _name; }
     set { _name = value; }
}
這麼好的書,這電腦的高科技的,怎麼也這樣蒙人啊?完完全全都是public訪問級別嘛
後來經過自己嘗試,發現正確的用法是這樣的
public string Name
{
    get { return _name; }
    protected set { _name = value; }//注意看訪問級別,和外層的不一樣哦}
這樣以來,就實現了get和set具備不同的訪問級別啦
使用的時候 要主意以下幾點:
1、定時屬性的時候,外層一定要有訪問級別修飾符(就是public string Name)這裏啦

2、在定義get和set訪問級別的時候,只能爲其中一個單獨設置
     意思就是說不能在get前邊來一個public,然後在set前邊再來一個修飾符,兩個當中只有一個能設置的哦
      別扔轉頭,什麼,不就是想給set和get兩個設置不同的訪問級別嘛,你以爲第一條上說的外層的修飾符是幹嘛用的?
     看例子,get前邊沒寫訪問修飾符吧?這樣它的權限默認是外層的權限,也就是public啦
     set的權限我就不用再說了,前邊白紙黑字,一個 protected 在那大大的豎着呢

3、外層的訪問權限一定要比內層的更爲寬鬆,這個也要主意,還說上邊的例子
     爲了實現同樣的訪問控制級別,如果你寫成
程序代碼:
protected  string Name //外層protected
    {
        public get { return _name; } //內層public
        set { _name = value; } 
    }
這樣就不行了,編譯器是會報錯的哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章