最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C# 的屬性和索引的封裝的意義

2021-02-13 21:21 作者:SunnieShine  | 我要投稿

這個問題得從兩個層面回答,封裝和方法本身。先來說一下封裝。

屬性就是用來包裝字段、為字段添加額外處理邏輯和封裝邏輯的

舉個例子,你的鼻子和嘴巴都能呼吸,但是嘴還能吃飯,那么嘴的功能相較于鼻子更完備,那干脆都用嘴巴呼吸算了,何必用鼻子呢?實際上鼻子封裝了呼吸的邏輯,保證吸入空氣里的灰塵能降到最小,這就是封裝給我們帶來的用途。如果我們?nèi)珣{靠嘴巴呼吸的話,確實鼻子沒有用,但這對我們?nèi)说纳眢w會帶來潛在的危險,諸如吸入灰塵沾到肺上之類的。

屬性和索引器就是這樣的一種存在,專門封裝字段的處理邏輯,以防別的程序員調(diào)用時亂使用字段,給字段處理加上任意執(zhí)行內(nèi)容,以至于出現(xiàn)危險的情況。

顯然我們就能看出區(qū)別。沒有屬性,我們就可以給年齡賦值為任意數(shù)值,甚至負數(shù)也沒問題。萬一有些時候處理邏輯里用到?%5Ctext%7Bage%7D 數(shù)值的時候出現(xiàn)了各種奇葩結(jié)果,那你這個時候再來反推出是傳參的 bug,我估計就比較麻煩了。

索引器也是一樣的道理,不過索引器側(cè)重于集合對象使用。如果一個對象專門用來存儲一系列元素,那么這種對象就有可能需要索引器的支持。和前文的思維一樣,如果你沒有索引器進行索引的驗證,那么賦的值就可能更加隨意,使得出現(xiàn)意外情況。

實際上還有一個封裝的東西:事件。事件是委托字段的封裝,委托字段用于執(zhí)行內(nèi)部對象的特定時刻觸發(fā)的行為。當(dāng)我們直接把對象里的委托字段改為?%5Ctext%7Bpublic%7D 時,別人就可以給委托字段賦值為任意同樣委托類型的執(zhí)行操作,使得行為變更,相當(dāng)于“截胡”。

事件的存在就是為了解決封裝。事件只允許我們可以對對象添加和刪除指定的處理邏輯。而內(nèi)部的委托字段不允許我們從外部直接使用它們。這樣的話,我們從外部調(diào)用對象的話,就只可以為對象添加新的處理邏輯,或者移除掉添加過的處理邏輯了。這樣比起原本直接訪問委托字段,為其設(shè)置處理邏輯算是迂回了一下,但起到封裝的機制,防止我們篡改原定的邏輯。

所以:建議書寫格式為:

或者用高級的語法,省略?%5Ctext%7Badd%7D?和?%5Ctext%7Bremove%7D?塊。

實際上這兩種寫法有一點不同,你可以參看?Sharplab.io?網(wǎng)站的生成代碼。后者處理的內(nèi)容會更多一些。

所以請記住,屬性、索引器和事件專門為普通字段和委托字段提供封裝。這是側(cè)重封裝層面解答的第一個問題。

第二個問題,方法。方法確實可以解決所有屬性、索引器的賦值行為,因為只要我們有了方法,就可以書寫類似于?%5Ctext%7BgetAge%7D?和?%5Ctext%7BsetAge%7D?的方法,這樣依然和屬性具有等同效果。之所以 C# 出了一個屬性機制(還有索引器),實際上是為了簡化書寫代碼和規(guī)范化處理邏輯,將類似于?%5Ctext%7BxiaoMing.setAge(20)%7D?這種代碼改寫為?%5Ctext%7BxiaoMing.Age%20%3D%2020%7D?更為直觀和更具有可讀性的賦值語句形式。索引器也是一樣,有些時候用?%5Ctext%7Bget%7D?方法獲取一個集合對象內(nèi)部的某一個索引位置的元素時,用索引器寫起來的樣子比起方法調(diào)用形式要更具可讀性(盡管你看方法看習(xí)慣了,但是帶有看起來像是數(shù)學(xué)符號的這些操作符,總能讓我們更清晰一些,只要這些操作符得是我們常見的符號)。

順帶說一下,%5Ctext%7BxiaoMing.Age%20%3D%2020%7D?這個語句是給?%5Ctext%7BAge%7D?屬性賦值為 20,并非直接操作了?%5Ctext%7B_age%7D?字段。在這個等號的賦值行為中,我們可以加入類似于前面的數(shù)據(jù)驗證,如果超過范圍就產(chǎn)生異常,于是整個等號的意義就發(fā)生了變化(它不僅僅有賦值行為,還有驗證行為),所以這也是一個重要的知識點。


C# 的屬性和索引的封裝的意義的評論 (共 條)

分享到微博請遵守國家法律
靖江市| 宜君县| 马鞍山市| 彰武县| 玛曲县| 克拉玛依市| 行唐县| 三都| 股票| 灵川县| 太仓市| 辽宁省| 司法| 沙雅县| 镇安县| 正安县| 榆中县| 德阳市| 元朗区| 乌拉特中旗| 靖远县| 韶山市| 新宾| 清镇市| 民丰县| 开化县| 剑川县| 静安区| 都昌县| 密山市| 青河县| 茂名市| 滦南县| 威海市| 封丘县| 南陵县| 余江县| 临泽县| 松原市| 平顶山市| 甘肃省|