C#中{get;set;}的具體使用
在C#程序中經(jīng)常會(huì)看到set,get的配套使用,很多人不知道它的用途。我就在這向大家講講,也加深一下自己的印象。
//這里有兩個(gè)類 public class person1 { public string name; } public class person2 { public string Name{set;get;} }
我們可以看到,第一個(gè)類中的name是沒有封裝的,第二給則用到{get;set;} 關(guān)鍵字進(jìn)行封裝。其實(shí)含義也是很簡(jiǎn)單,get與set分別對(duì)應(yīng)的是可讀與可寫。其實(shí)以前的代碼是這樣寫的,只是現(xiàn)在的.net框架可以忽略成上面那樣
private string name; public string Name { get { return name; } set { name = value; } }
區(qū)別:當(dāng)實(shí)例化第一個(gè)“person1”這個(gè)類時(shí),系統(tǒng)在分配內(nèi)存空間時(shí)對(duì)name屬性直接分配內(nèi)存,之后對(duì)name屬性的操作也是直接操作內(nèi)存中name屬性所在的這個(gè)塊;而當(dāng)實(shí)例化第二個(gè)人“person2”類型時(shí),系統(tǒng)會(huì)先分配一個(gè)叫name的private私有的內(nèi)存空間,讀與寫的操作都是通過Name這個(gè)public的類似于指針的東西來關(guān)聯(lián)name進(jìn)行,以此達(dá)到封裝的目的,并且通過get和set關(guān)鍵字也可以控制可讀還是可寫。
簡(jiǎn)單的說就是控制字段的讀寫權(quán)限。
再舉例說明下:
假設(shè)類是一銀行,既能存錢也能取錢
? ? Private Money; ? ? Private class bank() ? ? { ? ? ? get ? ? ? { ? ? ? ? ?return Money; ? ? ? } ? ? ? Set ? ? ? { ? ? ? ? ?Money=value; ? ? ? } ? ? }
Money 就像銀行里的自動(dòng)取款機(jī),你看不見里面的Money,但你能用set(存錢),用get(取錢)。Money是一個(gè)私有字段,是分裝在類中的,類以外的程序不能直接訪問的。C#中g(shù)et、set用法中,類的set和get成員是外部程序訪問類內(nèi)部屬性的唯一方法,就像你去銀行取錢,你不能直接從銀行的保險(xiǎn)柜里拿錢,而是銀行營(yíng)業(yè)人員把錢取出來給你的。
屬性在調(diào)用者看來就像一個(gè)普通的變量,但作為類的設(shè)計(jì)者,你可以利用屬性來隱藏你類中的一些字段,使外界只能通過屬性來訪問你的字段,你可以通過屬性來限制外界對(duì)你的字段的存取,就利用get、set。如果想讓用戶隨意存取你的字段,那么就實(shí)現(xiàn)get、set;如果只想讓用戶讀取字段,就只實(shí)現(xiàn)get;若只想讓用戶寫字段就只實(shí)現(xiàn)set。同時(shí)還可以在set和get中對(duì)用戶傳遞的值進(jìn)行一些驗(yàn)證工作,以確保你的字段將含有正確的值。
? ? Private int a; ? ? Public int index ? ? { ? ? ? get ? ? ? { ? ? ? ? return a; ? ? ? } ? ? ? set ? ? ? { ? ? ? ? ?If (value>0) ? ? ? ? ? ?a=value; ? ? ? ? ?else ? ? ? ? ? ?a=0; ? ? ? } ? ? }
可看出,get、set用法中一則是隱藏組件或類內(nèi)部的真是成員;
二是用來建立約束的,比如,實(shí)現(xiàn)“有我沒你”這種約束;
三是用來響應(yīng)屬性變化事件,當(dāng)屬性變化是做某事,只要寫在set方法里就行。
當(dāng)你想讀出或?qū)懭雽傩缘闹禃r(shí),存取標(biāo)志限定了被實(shí)現(xiàn)的語句。用于讀出屬性的值的存取標(biāo)志記為關(guān)鍵字get,而要修改屬性的值的讀寫符標(biāo)志記為set。
到此這篇關(guān)于C#中{get;set;}的具體使用的文章就介紹到這了,更多相關(guān)C# {get;set;}內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法匯總
這篇文章主要介紹了Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法,本文通過四種方法在 Unity 中實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和讀取方法的案例內(nèi)容,結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-10-10C#使用System.Buffer以字節(jié)數(shù)組Byte[]操作基元類型數(shù)據(jù)
這篇文章介紹了C#使用System.Buffer以字節(jié)數(shù)組Byte[]操作基元類型數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C#中的應(yīng)用程序接口介紹及實(shí)現(xiàn),密封類與密封方法
今天小編就為大家分享一篇關(guān)于C#中的應(yīng)用程序接口介紹及實(shí)現(xiàn),密封類與密封方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘一
本文一介紹了數(shù)據(jù)結(jié)構(gòu)的基本概念 而介紹了算法的基本概念,并且重點(diǎn)討論了算法時(shí)間復(fù)雜度,并且用程序予以證明2012-11-11字符串和十六進(jìn)制之間的轉(zhuǎn)換方法實(shí)例
這篇文章介紹了字符串和十六進(jìn)制之間的轉(zhuǎn)換方法實(shí)例,有需要的朋友可以參考一下2013-11-11C#連接Oracle數(shù)據(jù)庫的實(shí)例方法
C#連接Oracle數(shù)據(jù)庫的實(shí)例方法,需要的朋友可以參考一下2013-04-04C#實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)易的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04