版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、為什么程序已經(jīng)可以正常工作了,我們還要改變它們呢?答案就是我們可以讓它們變得更好。我們常常會改變所使用的工具或者語言,因為新的工具或者語言更富生產(chǎn)力。如果固守舊有的習(xí)慣,我們將得不到期望的結(jié)果。對于C#這種和我們已經(jīng)熟悉的語言(如C或Java)有諸多共通之處的新語言,情況更是如此。人們很容易回到舊的習(xí)慣中去。當(dāng)然,這些舊的習(xí)慣絕大多數(shù)都很好,C#語言的設(shè)計者們也確實希望我們能夠利用這些舊習(xí)慣下所獲取的知識。但是,為了讓C#和公共語言運行
2、庫(CommonLanguageRuntime,CLR)能夠更好地集成在一起,從而為面向組件的軟件開發(fā)提供更好的支持,這些設(shè)計者們不可避免地需要添加或者改變某些元素。本章將討論那些在C#中應(yīng)該改變的舊習(xí)慣,以及對應(yīng)的新的推薦做法。條款1:使用屬性代替可訪問的數(shù)據(jù)成員C#將屬性從其他語言中的一種特殊約定提升成為一種第一等(firstclass)的語言特性。如果大家還在類型中定義公有的數(shù)據(jù)成員,或者還在手工添加get和set方法,請趕快停下
3、來。屬性在使我們可以將數(shù)據(jù)成員暴露為公有接口的同時,還為我們提供了在面向?qū)ο蟓h(huán)境中所期望的封裝。在C#中,屬性(property)是這樣一種語言元素:它們在被訪問的時候看起來好像是數(shù)據(jù)成員,但是它們卻是用方法實現(xiàn)的。有時候,一些類型成員最好的表示形式就是數(shù)據(jù),例如一個客戶的名字、一個點的xy坐標,或者上一年的收入。使用屬性我們可以創(chuàng)建一種特殊的接口——這種接口在行為上像數(shù)據(jù)訪問,但卻仍能獲得函數(shù)的全部好處。客戶代碼[1]對屬性的訪問就像
4、訪問公有變量一樣。但實際的實現(xiàn)采用的卻是方法,這些方法內(nèi)部定義了屬性訪問器的行為。.框架假定我們會使用屬性來表達公有數(shù)據(jù)成員。事實上,.框架中的數(shù)據(jù)綁定類只支持屬性,而不支持公有數(shù)據(jù)成員。這些數(shù)據(jù)綁定類會將對象的屬性關(guān)聯(lián)到用戶界面控件(Web控件或者WindowsFms控件)上。其數(shù)據(jù)綁定機制事實上是使用反射來查找一個類型中具有特定名稱的屬性。例如下面的代碼:textBoxCity.DataBindings.Add(“Text“addr
5、ess“City“)便是將textBoxCity控件的Text屬性和address對象的City屬性綁定在一起。(有關(guān)數(shù)據(jù)綁定的細節(jié),參見條款38。)如果City是一個公有數(shù)據(jù)成員,這樣的數(shù)據(jù)綁定就不能正常工作。.框架類庫(FramewkClassLibrary)的設(shè)計者們之所以不支持這樣的做法,是因為將數(shù)據(jù)成員直接暴露給外界不符合面向?qū)ο蟮脑O(shè)計原則。.框架類庫這樣的設(shè)計策略從某種意義上講也是在推動我們遵循面向?qū)ο蟮脑O(shè)計原則。對于C和J
6、ava編程老手,我想特別指出的是這些數(shù)據(jù)綁定代碼并不會去查找get和set函數(shù)。在C#中,我們應(yīng)該忘掉get_和set_這些舊式的約定,而全面采用屬性。當(dāng)然,數(shù)據(jù)綁定所應(yīng)用的類一般都要和用戶界面打交道。但這并不意味著屬性只在UI(用戶界面)邏輯中有用武之地。對于其他類和結(jié)構(gòu),我們也需要使用屬性。隨著時間的推移,新的需求或行為往往會影響原來類型的實現(xiàn),采用屬性比較容易能夠應(yīng)對這些變化。例如,我們可能很快就會發(fā)現(xiàn)Customer類型不能有一
7、個空的Name。如果我們使用一個公用屬性來實現(xiàn)Name,那么只需要在一個地方做更改即可:publicclassCustomerprivatestring_namepublicstringNamegetreturn_namesetif((value==null)||(value.Length==0))thrownewArgumentException(“Namecannotbeblank““Name“)_name=valueset最后,我
8、們還可以借助屬性的特點來創(chuàng)建const和非const版本的接口:publicinterfaceIConstNameValuePairobjectNamegetobjectValuegetpublicinterfaceINameValuePairobjectValuegetset上述接口的應(yīng)用:publicclassStuff:IConstNameValuePairINameValuePairprivatestring_namepriva
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機專業(yè)外文翻譯 ---- effective c# 中文版改善c程序的50種方法
- effectivec#改善c#程序的50種方法
- 侯捷 more effective c++(wq中文版)
- c#程序
- epa3540c中文版
- c中文版說明書
- c#編寫聊天程序
- c#程序結(jié)構(gòu)
- c#文獻翻譯---c#的優(yōu)點
- c#擴展方法的理解
- C#模型驅(qū)動程序開發(fā)方法研究.pdf
- c#程序的回歸測試選擇
- 解決c# streamreader讀入中文亂碼
- c#小程序時鐘源碼
- c#語言程序設(shè)計解析
- 《c#程序設(shè)計基礎(chǔ)》習(xí)題庫程序
- 《c#程序設(shè)計》期末題庫
- 《c#程序設(shè)計基礎(chǔ)》習(xí)題庫程序
- 《c#程序設(shè)計基礎(chǔ)》習(xí)題庫程序
- 改善不良團隊的10種方法
評論
0/150
提交評論