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也變成了5。

當你使用這個公有變量A當做右值給其他變量賦值的時候,他就會執行{ }里邊的語句。
假如你在主函數當中有這么個操作:

int B=A;

這個時候并不是把A的值直接給B,而是先執行A里邊的get(),把a的值返回給A,再將A的值傳遞給B;
這時候相當于

int B=0;
A=a;
B=A;

只帶有 get 訪問器的屬性稱為只讀屬性。無法對只讀屬性賦值。
假如你在主函數當中有這么個操作:

int B=2;
A=B;

這個時候直接把B的值給A,但是編譯器報錯,提示A是只讀的;

當引用屬性時,除非該屬性為賦值目標,否則將調用 get 訪問器讀取該屬性的值。
白話解釋一下,當變量定義時使用get,那么變量在作為右值給其他變量賦值或者當做函數參數值時候,會先運行get里邊的語句。當做為左值被賦值時候則報錯。
現在總結一下:
1.get就是返回一個值或者說屬性;
2.在定義時使用get的變量在使用作為右值先執行get里邊的語句返回給變量再去使用
3.在定義時使用get的變量在使用作為左值報錯
不能光說不練啊,接下來寫個控制臺程序來驗證一下。
先來源碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static private int a = 3;static public int A{get { return a; }}static void Main(string[] args){int B=0;a = 5;A = 22;B = A;}}
}

這個時候編譯一下,報錯了:
錯誤 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也變成了5。

當你使用這個公有變量A當做左值被其他變量賦值的時候,他就會執行{ }里邊的語句。
假如你在主函數當中有這么個操作:

int B=3;
A = B;

這個時候并不是只把B的值給A,還會將A的值賦值給a;
這時候相當于

int B=3;
A=B;
a=A;

只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標外,無法對其進行引用。
假如你在主函數當中有這么個操作:

int B=2;
A=B;

這個時候直接把A的值給B,但是編譯器報錯,提示A是只寫的;

現在總結一下:
1.set改變A變量時候a的值也會改。
2.只有set屬性的變量是只讀的。

不能光說不練啊,接下來寫個控制臺程序來驗證一下。
先來源碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{class Program{static private int a = 3;static public int A{set { a = value; }}static void Main(string[] args){int B = 0;A = 22;B = A;}}
}

這個時候編譯一下,報錯了:
錯誤 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的值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254717.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IM應用中如何計算富文本的高度

背景 在開發IM的項目過程中,經常會有出現一些需要計算DOM高度,然后超出若干行隱藏等需求。很多時候,需要計算高度的DOM元素都是動態生成的,我們無法在數據渲染前獲取到它的高度。 如果沒有任何交互,我們可以通過CSS來實…

G代碼 機器人的CNC實現

  控制銑削工作臺和工件的NC程序,通過CAD軟件創建,這些NC程序與特定的機器類型相關。 NC程序在笛卡爾坐標系中動作的描述,對于需要確保一個明確的變換軸位置的關節型的機器人來說,缺少附加的狀態和旋轉信息。傳…

IScroll5中文API整理,用法與參考

IScroll是移動頁面上被使用的一款仿系統滾動插件。IScroll5相對于之前的IScroll4改進了許多,使得大家可以更方便的定制所需的功能了。 做項目的時候正好用到了這個插件,自己做了一下總結,發在這里方便大家學習IScroll5。 官網:htt…

Linux?安裝USB攝像頭

sudo apt-get updatesudo apt-get install fswebcamsudo apt-get install mplayersudo apt-get install alsamixer安裝完畢ls /dev查找設備是否有video0這個設備sudo mplayer tv:// 可以看到攝像內容轉載于:https://www.cnblogs.com/smartkeke/p/6820426.html

struct x264_t 維護著CODEC的諸多重要信息

//x264_t結構體維護著CODEC的諸多重要信息struct x264_t{/* encoder parameters ( 編碼器參數 )*/x264_param_t param;x264_t *thread[X264_SLICE_MAX];/* bitstream output ( 字節流輸出 ) */struct{int i_nal;x264_nal_t nal[X264_NAL_MAX];int i_bitstr…

如何判斷一條曲線是否自己相交?

今天看到群里有人在問這個問題,想了一個解決辦法。 我們首先作假設,如果一條曲線有交點,那么它就是相交的對吧。可能大家想的都是這樣,就開始找各種方法去識別交點。 我們換個角度想一下:是不是我們判斷這條曲線是否帶…

XML 與網絡的數據傳輸

XML 與網絡的數據傳輸

hdu 5813 Elegant Construction

水題 題意:有n個城市,給你每個城市能到達城市的數量,要你構圖,輸出有向邊,要求無環,輸出任意的解 例: Sample Input 332 1 021 143 1 1 0Sample OutputCase #1: Yes21 22 3Case #2: NoCase #3: …

Redis實戰筆記

Redis 數據庫 一、 概要 1. 特點 用于抽象數據類型的 DSL內存存儲基礎數據結構 API編碼風格避免代碼復雜兩層 API以優化為樂2. 數據類型 鍵值對(字符串->字符串)哈希列表(鏈表)集合:差并交有序集合 列表 集合位圖…

內存申請與一級二級指針

1.如果是函數內進行內存申請,很簡單,標準用法就可以了: test(){int *array;array(int *)malloc(sizeof(int)*10);//申請10*4 bytes,即10個單位的int內存單元}注意,malloc使用簡單,但是注意參數和返回值&…

halcon相機標定及圖像矯正(代碼)

侵刪 1 halcon相機標定和圖像矯正 對于相機采集的圖片,會由于相機本身和透鏡的影響產生形變,通常需要對相機進行標定,獲取相機的內參或內外參,然后矯正其畸變。相機畸變主要分為徑向畸變和切向畸變,其中徑向畸變是由透…

找尋一個郵箱

import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;public class zhengze {public static void main(String[] args) { //1.創建一個正則表達式對象Pattern pPattern.compile("[0-9]{6}"); //2.獲得匹配器 String s…

先弄個XML解析器代碼抄一抄 慢慢研究 O(∩_∩)O哈哈~

出處:http://bbs.csdn.net/topics/390229172 已經自我放逐好幾年了.打算去上班得了.在最后的自由日子里,做點有意義的事吧... 先來下載地址 http://www.kuaipan.cn/file/id_12470514853353274.htm 已經在很多正式,非正式的場合…

紫書 例題8-10 UVa 714 (二分答案)

這道題讓最大值最小, 顯然是二分答案當題目求的是最大值最小, 最小值最大, 這個時候就要想到二分答案為什么可以二分答案呢, 因為這個時候解是單調性的, 如果簡單粗暴一點就全部枚舉一遍, 驗證答案。但是因…

was not declared in this scope

“was not declared in this scope”是一個錯誤信息,在編譯的時候會遇到。其含義為標識符在其出現的地方是未被定義的。 出現該錯誤的時候,會同時把未定義的變量名顯示出來。比如如下程序: int main(){ printf("%d",i);//這個i是…

函數參數的傳遞問題(一級指針和二級指針)

函數參數的傳遞問題(一級指針和二級指針) [轉]原以為自己對指針掌握了,卻還是對這個問題不太明白。請教! 程序1: void myMalloc(char *s) //我想在函數中分配內存,再返回 { s(char *) malloc(100); } void …

Win7下使用U盤安裝linux Ubuntu16.04雙系統圖文教程

Win7下使用U盤安裝linux Ubuntu16.04雙系統圖文教程 Ubuntu(友幫拓、優般圖、烏班圖)是一個以桌面應用為主的開源GNU/Linux操作系統,Ubuntu 是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架構&#xf…

SynchronizationContext

SendOrPostCallback xxx vg > { Text "內部: "vg.ToString(); };dynamic vx new { a SynchronizationContext.Current, b xxx };Thread td new Thread(x >{dynamic tmp x;// SynchronizationContext ds x as SynchronizationContext;for (in…

CoDeSys的前世今生

工作以及網上看到不少人說,CoDeSys和西門子step7,在德國都屬于標準過程,牛逼的小朋友都可以用其編程,不知真假,相信無風不起浪,多少有些依據,看看國內清一色的日系編程…

UVALive 7324 ASCII Addition (模擬)

ASCII Addition題目鏈接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/A Description Nowadays, there are smartphone applications that instantly translate text and even solve math problems if you just point your phone’s camera at them. You…