版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、16創(chuàng)建常量、原子性的值類型創(chuàng)建常量、原子性的值類型概述本文是《EffectiveC#》一書第七節(jié)的讀書筆記。通過(guò)這篇文章,我主要想向大家說(shuō)明一個(gè)我們平時(shí)可能不太會(huì)注意到的問(wèn)題:創(chuàng)建具有常量性和原子性的值類型。從類型設(shè)計(jì)談起從Class到Struct假如我們要設(shè)計(jì)一個(gè)存儲(chǔ)收信人地址的類型(Type),我們管這個(gè)類型叫Address。它應(yīng)該包含這樣幾個(gè)屬性:Province省City市Zip郵編要求對(duì)Zip的格式進(jìn)行控制(必須全為數(shù)字,且
2、為6位),大家該如何設(shè)計(jì)呢?我想很多人會(huì)寫成這樣吧:publicclassAddressprivatestringprovinceprivatestringcityprivatestringzippublicstringProvincegetreturnprovincesetprovince=valuepublicstringCitygetreturncitysetcity=valuepublicstringZipgetreturnzi
3、psetCheckZip(value)驗(yàn)證格式zip=value檢測(cè)是不是正確的zipprivatevoidCheckZip(stringvalue)stringpattern=@“d6“if(!Regex.IsMatch(valuepattern))36創(chuàng)建常量、原子性的值類型其后的Province的賦值都失敗了,但是對(duì)City的賦值是成功的。結(jié)果就是出現(xiàn)了Provice是陜西,City卻是青島這種情況。即是在賦值Zip時(shí)沒(méi)有引發(fā)異常
4、,也會(huì)出現(xiàn)問(wèn)題:在多線程情況下,當(dāng)當(dāng)前線程執(zhí)行到修改了City為“青島”,但還沒(méi)有修改Zip和Province的時(shí)候(Zip仍為“710068”、Province仍為“陜西”)。如果此時(shí)其他線程訪問(wèn)類型實(shí)例a,那么也將會(huì)讀取到不一致的數(shù)據(jù)。常量性和原子性我們現(xiàn)在已經(jīng)知道了上面存在的問(wèn)題,那么接下來(lái)該如何改進(jìn)呢?我們先來(lái)看看作者對(duì)常量性和原子性給的定義:?對(duì)象的原子性:對(duì)象的狀態(tài)是一個(gè)整體,如果一個(gè)字段改變,其他字段也要同時(shí)做出相應(yīng)改變。
5、簡(jiǎn)單來(lái)說(shuō),就是要么不改,要么全改。?對(duì)象的常量性:對(duì)象的狀態(tài)一旦確定,就不能再次更改了。如果想再次更改,需要重新構(gòu)造一個(gè)對(duì)象。我們已經(jīng)知道了對(duì)象的原子性和常量性這兩個(gè)概念,那么接下來(lái)該如何去實(shí)施呢?對(duì)于原子性,我們實(shí)施的辦法是添加一個(gè)構(gòu)造函數(shù),在這個(gè)構(gòu)造函數(shù)中為對(duì)象的所有字段賦值。而為了實(shí)施常量性,我們不允許在為對(duì)象賦值以后還能對(duì)對(duì)象狀態(tài)進(jìn)行修改,所以我們將屬性中的set訪問(wèn)器刪除掉,同時(shí)將字段聲明為readonly:publicstr
6、uctAddressprivatereadonlystringprovinceprivatereadonlystringcityprivatereadonlystringzippublicAddress(stringprovincestringcitystringzip)this.city=citythis.province=provincethis.zip=zipCheckZip(zip)驗(yàn)證格式publicstringProvinc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 4第五章復(fù)合創(chuàng)建值類型
- 05vba數(shù)據(jù)類型與變量常量-
- 二次函數(shù)最值問(wèn)題類型題總結(jié)
- 常用物理常量
- 典型數(shù)據(jù)類型的地址和值
- 二值模式的線性可分性研究.pdf
- 中心原子雜化軌道類型的判斷方法
- 中心原子雜化軌道類型的判斷方法
- ip控件的ip值轉(zhuǎn)化為cstring類型
- 二、原子晶體
- 波粒二象性和原子結(jié)構(gòu)
- 集值隨機(jī)級(jí)數(shù)的收斂性及集值二階矩過(guò)程.pdf
- javascript數(shù)據(jù)類型及常量變量表達(dá)式和運(yùn)算符教案
- 二、橋梁的主要類型
- 專題22波粒二象性原子核
- 考點(diǎn)18 波粒二象性 原子物理
- Banach空間值弱鞅空間及其原子分解.pdf
- 機(jī)械性窒息的類型
- 波粒二象性、原子結(jié)構(gòu)、氫原子光譜江蘇高考總復(fù)習(xí)物理
- 場(chǎng)地類型對(duì)設(shè)計(jì)反應(yīng)譜平臺(tái)值的影響.pdf
評(píng)論
0/150
提交評(píng)論