set()与get()详细解答(C#)
這幾天在搬磚時候用到了set()與get(),同事問了我一些問題,我打算在博客中總結一下。
覺得幫助到了您,幫我點個贊哦。
屬性訪問器
其實說白了就是操作一個屬性,更通俗一點說就是對一個變量的取值與賦值。
先來看get()
get 訪問器必須在 return 或 throw 語句中終止,并且控制不能超出訪問器體。
private int a; // 私有的變量 public int A // 公有變量,這個變量作用就是得到私有變量的值 {get {return a; //這里的return就是上邊說的必須在 return 或 throw 語句中終止} }現在還是不懂對吧,這個變量怎么還能加{ }里邊寫語句呢。嘿嘿就是這么神奇,就是這么規定的。
當你改變a的值,A的值也會變。
假如你在主函數當中有這么個操作:
你會發現運行完a=5以后A也變成了5。
當你使用這個公有變量A當做右值給其他變量賦值的時候,他就會執行{ }里邊的語句。
假如你在主函數當中有這么個操作:
這個時候并不是把A的值直接給B,而是先執行A里邊的get(),把a的值返回給A,再將A的值傳遞給B;
這時候相當于
只帶有 get 訪問器的屬性稱為只讀屬性。無法對只讀屬性賦值。
假如你在主函數當中有這么個操作:
這個時候直接把B的值給A,但是編譯器報錯,提示A是只讀的;
當引用屬性時,除非該屬性為賦值目標,否則將調用 get 訪問器讀取該屬性的值。
白話解釋一下,當變量定義時使用get,那么變量在作為右值給其他變量賦值或者當做函數參數值時候,會先運行get里邊的語句。當做為左值被賦值時候則報錯。
現在總結一下:
1.get就是返回一個值或者說屬性;
2.在定義時使用get的變量在使用作為右值時先執行get里邊的語句返回給變量再去使用;
3.在定義時使用get的變量在使用作為左值時報錯;
不能光說不練啊,接下來寫個控制臺程序來驗證一下。
先來源碼
這個時候編譯一下,報錯了:
錯誤 1 無法對屬性或索引器“ConsoleApplication1.Program.A”賦值 – 它是只讀的
接下來就把這句話屏蔽掉,編譯運行打斷點。
在給a賦值時候,在使用A時候打個斷點,在A的get里邊打個斷點。
運行一下看一下
先運行到:a = 5;這個時候A與a都還為3;
按F10單步再接著往下邊運行
我們驚奇的發現Aa同時變成了5
按F10單步再接著往下邊運行,就會進入get
按F10單步再接著往下邊運行,才到A給B賦值。
好啦,get我們講完啦。接下來是set
再來看set()
set 訪問器與返回 void 的方法類似。它使用稱為 value 的隱式參數,此參數的類型是屬性的類型。
private int a; public int A {set {a = value; } }當你改變A的值,a的值也會變。
假如你在主函數當中有這么個操作:
你會發現運行完A=5以后a也變成了5。
當你使用這個公有變量A當做左值被其他變量賦值的時候,他就會執行{ }里邊的語句。
假如你在主函數當中有這么個操作:
這個時候并不是只把B的值給A,還會將A的值賦值給a;
這時候相當于
只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標外,無法對其進行引用。
假如你在主函數當中有這么個操作:
這個時候直接把A的值給B,但是編譯器報錯,提示A是只寫的;
現在總結一下:
1.set改變A變量時候a的值也會改。
2.只有set屬性的變量是只讀的。
不能光說不練啊,接下來寫個控制臺程序來驗證一下。
先來源碼
這個時候編譯一下,報錯了:
錯誤 1 無法對屬性或索引器“ConsoleApplication1.Program.A”賦值 – 它是只讀的
接下來就把這句話屏蔽掉,編譯運行打斷點。
我們在給A賦值時打斷點,再在set處打斷點。
運行一下看一下
先運行到:a = 3;這個時候A里邊還是空的,這是因為A是只寫的沒辦法讀出來他的數值;
按F10單步再接著往下邊運行,直接先到set中,a的值變成了22。神奇吧
按F10單步再接著往下邊運行,程序結束。
好啦,get、set我們講完啦。接下來是結合在一塊。
再來看set()get()
同時帶有 get 和 set 訪問器的屬性為讀寫屬性。
private int a; // 私有的變量 public int A // 公有變量,這個變量作用就是得到私有變量的值 {get {return a; }set {a = value; } }經過上述講解,我們直接來看代碼,編譯調試看一下。源代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApplication1 {class Program{static private int a = 33;static public int A{get { return a; }set { a = value; }}static void Main(string[] args){int B;B = A;a = 55;}} }這個代碼自己編譯調試一下吧,自己建一個工程,直接復制過去就好了。
總結:
1、A4與a4的值,總是相等。
2、若要修改a4,則需要通過A4修改即可。a4的往往通過設置外部屬性A4值的方式,然后在A4屬性內設置一些條件,來更新a4。
3、Value的值,總是等于外部屬性A4的值。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的set()与get()详细解答(C#)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基本数据类型____字典
- 下一篇: 三个点拟合圆形的函数C#