C#修飾符publicprivateprotectedinternalprotectedinternal_第1頁
C#修飾符publicprivateprotectedinternalprotectedinternal_第2頁
C#修飾符publicprivateprotectedinternalprotectedinternal_第3頁
C#修飾符publicprivateprotectedinternalprotectedinternal_第4頁
C#修飾符publicprivateprotectedinternalprotectedinternal_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、描述/品種/構(gòu)造函數(shù),直接給品種賦值修飾符的理解訪問權(quán)限存在的意義,各種訪問權(quán)限的作用,在代碼中靈活應(yīng)用訪問權(quán)限?!境霈F(xiàn)頻率】【解答】1private修飾private修飾符用于設(shè)置類或類成員的訪問權(quán)限僅為所屬類的內(nèi)部,private也被稱為私有修飾符。某些時候需要訪問私有類成員時,可通過get和set訪問器讀取或修改。本例通過對類的私有成員及私有類的訪問,展示private修飾符的保護(hù)作用。在D:webNET目錄下新建一個程序文件,并命名為ModPrivate.cs,編寫代碼如代碼4.3所示。代碼4.3private修飾符示例:ModPrivate.csusingSystem;classMo

2、dPrivatestaticvoidMain(Stringargs)Dogdg=newDog(可卡”);Console.WriteLine(”一只小狗創(chuàng)建成功!”);Console.WriteLine(”這只++的品種是:+dg.type);/由于參數(shù)類型為字符串的構(gòu)造函數(shù)是私有的,這里不能直接創(chuàng)建實(shí)例對象/Tigertg=newTiger(”華南虎”);由于Tiger類所嵌套的ZooTiger類是私有類,所以無法直接訪問/Tiger.ZooTigertz=newTiger.ZooTiger();Tigertg=newTiger(true);參數(shù)類型為布爾型的構(gòu)造函數(shù)可創(chuàng)建Tig

3、er類的對象Console.WriteLine(n一只老虎創(chuàng)建成功?。?;Console.WriteLine(”這只”++的品種是華南虎嗎?”+tg.ischinatiger);classDog/狗類名稱internalstringname=小狗;privatestring_type;internalDog(stringtp)this._type=tp;internalstringtype/type變量,get訪問器獲取私有成員_type的值getreturnthis._type;classTiger/虎類名稱internalstringname=老虎;/品種/是否為華南虎/構(gòu)造函

4、數(shù),直接給品種賦值privatestring_type;privatebool_ischinatiger;privateTiger(stringtp)this._type=tp;internalTiger(boolchinatiger)構(gòu)造函數(shù),直接給_ischinatiger賦布爾型值this._ischinatiger=chinatiger;internalstringischinatiger/ischinatiger變量,get訪問器獲取返回值get/由于同屬于Tiger類的內(nèi)部,所以可創(chuàng)建ZooTiger私有類的對象ZooTigerzt=newZooTiger();/返回字符串,內(nèi)容為

5、私有成員_ischinatiger的值和ZooTiger的對象的name值returnthis._ischinatiger+(++);privateclassZooTigerinternalstringname;internalZooTiger()=動物園的老虎;2protected修飾符protected修飾符用于設(shè)置類或類成員的訪問權(quán)限僅為所屬類及子類的內(nèi)部。本例通過對類的私有成員及私有類的訪問,展示private修飾符的保護(hù)作用。在D:webNET目錄下新建一個程序文件,并命名為ModProtected.cs,編寫代碼如代碼4.4所示。代碼4.4prote

6、cted修飾符示例:ModProtected.csusingSystem;classModProtectedstaticvoidMain(Stringargs)Console.WriteLine(”請輸入所需創(chuàng)建老虎對象的品種(如東北虎、華南虎、孟加拉虎等):);stringinput=Console.ReadLine();讀取用戶輸入,并存儲于input變量stringnm,tp;if(input!=華南虎)如果input變量存儲的不是華南虎字符串Tigertg=newTiger(input);創(chuàng)建Tiger類的對象,并傳遞input變量的值nm=;將tg對象的name屬性賦值

7、給nm變量tp=tg.type;/將tg對象的type屬性賦值給tp變量elseChinaTigertg=newChinaTiger();創(chuàng)建ChinaTiger類的對象將tg對象的name屬性(繼承于父類中聲明為protected的屬性)賦值給nm變量nm=;將tg對象的type屬性(繼承于父類中聲明為protected的屬性)賦值給tp變量tp=tg.type;Console.WriteLine(n一只0創(chuàng)建成功!,nm);Console.WriteLine(”這只0的品種是:1,nm,tp);classTiger/虎類名稱protectedstring_name=老虎;pr

8、otectedstring_type;/品種internalTiger()/無參數(shù)構(gòu)造函數(shù)internalTiger(stringt)/構(gòu)造函數(shù),直接給品種賦值this._type=t;internalstringname/name變量,get訪問器獲取返回值getreturnthis._name;返回字符串,內(nèi)容為私有成員name的值internalstringtype/type變量,get和set訪問器獲取返回值或?qū)懭胫礸etreturnthis._type;返回字符串,內(nèi)容為私有成員_type的值setthis._type=value;為私有成員_type賦值classChinaTige

9、r:Tiger/華南虎類名稱internalChinaTiger()/構(gòu)造函數(shù),直接給品種賦值this._type=華南虎;直接賦值華南虎字符串給父類中繼承的_type屬性3internal修飾符interna1修飾符修飾的類或類成員的訪問權(quán)限為同一程序集內(nèi)部,C#默認(rèn)的類訪問修飾符即為internal前面2個示例中,需要供類外部代碼訪問的成員都使用了internal修飾符,因?yàn)檫@些類都處于同一程序集中。4public修飾符public修飾符則為公共訪問權(quán)限,對代碼的訪問沒有任何限制。大多數(shù)情況下須謹(jǐn)慎使用public修飾符,因?yàn)闉E用將影響類的封裝性,并且?guī)戆踩[患。以下為代碼的運(yùn)行結(jié)果:在

10、命令行下編譯ModPrivate.cs后,執(zhí)行ModPrivate程序,其效果如圖4.5所示。圖4.5private修飾符示例從本例代碼中可知,ZooTiger類無法在類的外部直接訪問,所有的私有成員只能在類的內(nèi)部訪問,本例采用了get訪問器訪問了小狗和老虎的品種,并創(chuàng)建了ZooTiger私有類的對象。有的讀者可能會迷惑,如果同時使用get和set訪問器,private修飾符意義何在?其實(shí)很多程序中確實(shí)有這樣的做法,這樣做向類的外部屏蔽了私有成員的實(shí)現(xiàn)方法,同時也隱藏了私有成員的實(shí)際名稱,有利于封裝性。例如本例,get訪問器中有2步操作,而外界無法獲知。在命令行下編譯ModProtected.

11、cs后,執(zhí)行ModProtected程序,其效果如圖4.6所示。圖4.6protected修飾符示例本例接收用戶的輸入,當(dāng)輸入值為“華南虎”時,創(chuàng)建ChinaTiger類的對象,并通過構(gòu)造函數(shù)賦值“華南虎”字符串給type字段。_type字段聲明中使用了protected修飾符,所以在Tiger類的子類(ChinaTiger類)中可被直接訪問。注意:即使派生類和基類在不同程序集中,派生類仍可訪問基類的protected修飾符成員。讀者必須清楚的一點(diǎn)是,派生類繼承了所有基類的成員,只是無法直接訪問基類的private成員,但可訪問protected成員?!痉治觥棵嫦?qū)ο缶幊痰奶卣髦痪褪欠庋b性,

12、而類就是封裝性的典型體現(xiàn)。在生活中,人們不需要知道電器的內(nèi)部構(gòu)造,但是能很容易地使用電器,這就是封裝性。在項(xiàng)目中需要編寫很多功能類,在程序運(yùn)行時只需要使用類所提供的功能,大部分類內(nèi)部的代碼實(shí)現(xiàn)需要封裝,拒絕外部訪問。這樣大大增加了類的內(nèi)部代碼安全和穩(wěn)定性,多個功能類之間也減少了互相干擾的可能。訪問權(quán)限修飾符即可將類及類的成員劃分多種安全級別,根據(jù)不同需要設(shè)置訪問權(quán)限。internal和public訪問修飾符是需要謹(jǐn)慎選擇的,多數(shù)情況下應(yīng)該盡量使用internal訪問修飾符。還有一種訪問修飾符,即protectedinterna1修飾符,可在子類中或同一程序集內(nèi)被訪問。如果要聲明成員只能被同一程

13、序集內(nèi)的派生類(子類)訪問,則應(yīng)首先設(shè)置所屬類為internal,成員設(shè)置為protected。c#中public,private,protected,internal的區(qū)別收藏在子類中我們可以通過血罪關(guān)鍵字訪冋基類的成員:調(diào)用基類上已被其他方法重寫的方法.指定創(chuàng)建派生類實(shí)例時應(yīng)調(diào)用的基類構(gòu)造函數(shù)?;愒L問只能在構(gòu)造函數(shù)、實(shí)例方法或?qū)嵗龑傩栽L問器中進(jìn)行。以靜態(tài)方法中使用b遜關(guān)鍵字是錯誤的;心z?再重溫下訪冋僵飾符訪問修飾符是一些關(guān)鍵字,用于指定聲明的成員或類型的可訪問性。類的繼承中有四個i方問修飾符:pubhcprotettedinternalprivate。僅屈這些方冋僅怖符可扌眞定釘列五個

14、可彳方問性級另jpublicprojectedinternalinternalprotectedprivateo聲明的可訪問性意勲h.publici方冋不受限制dprotected訪問僅限于包含類或從包含類派生的類型荒internal訪問僅限于當(dāng)前項(xiàng)目。protectedinternal訪問僅限于從包含議生的當(dāng)前項(xiàng)目或美型private訪問僅限于包含類型乞msdn的解釋如下:internal指的是同一個程序集,內(nèi)部成員和類型才是可以訪問的.內(nèi)部訪問通常用于基于組件的開發(fā),因?yàn)樗挂唤M組件能夠以私有方式進(jìn)行合作,而不必向應(yīng)用程序代碼的其余部分公開一個成員或類型只能有一個訪問修飾符,使用prote

15、ctedinternal組合時除外。命名空間上不允許使用訪問修飾符。命名空間沒有訪問限制。根據(jù)發(fā)生成員聲明的上下文,只允許某些聲明的可訪問性。如果在成員聲明中未指定訪問修飾符,則使用默認(rèn)的可訪問性。不嵌套在其他類型中的頂級類型的可訪問性只能是internal或public。這些類型的默認(rèn)可訪問性是internal。嵌套類型是其他類型的成員,它們可以具有下表所示的聲明的可訪問性。屬于默認(rèn)的成員可訪問性該成員允許的聲明的可訪問性無無訪問權(quán)限Solutionprivateinti;internalintj;/ClassDClassEderivedfromAC#的細(xì)節(jié)(二)-修飾符七月6th,2008

16、寫在最前面的話:C#的細(xì)節(jié)是我當(dāng)初學(xué)習(xí)C#時候,做的一些學(xué)習(xí)筆記的整理,現(xiàn)在回頭看來這些都是非常淺顯的知識,是C#非常細(xì)節(jié)的地方,同時也是不能忽略的地方,”細(xì)節(jié)決定成敗“,也許有些嚴(yán)重。我希望把這些整理出來,可以給初學(xué)者一個參考,也給自己一個溫故知新的機(jī)會。高手就不必花時間來看了。;-)在c#的中修飾符的概念,最讓初學(xué)者有些頭痛了,理解起來也不是想象中那么簡單,關(guān)鍵是不要搞亂了。c#的修飾符大概分3類:1、訪問型修飾符,就是控制所修飾成員的可訪問域,包括:public、private、protected、internal和protectedinternal。其中只能protectedinter

17、nal組合,其他都不能。public:訪問不受限制。private:訪問僅限于包含類型。只有包含該成員的類可以存取.protected:訪問僅限于包含類或從包含類派生的類型。只有包含該成員的類以及繼承的類可以存取.Internal:訪問僅限于當(dāng)前程序集。只有當(dāng)前項(xiàng)目(工程)可以存取.protectedinternal:訪問僅限于當(dāng)前程序集或從包含類派生的類型。上面的概念好像很繞口。不過在如果你對面向?qū)ο蟠笾铝私獾脑?,理解這些概念并不難,需要明確兩個東東:程序集和項(xiàng)目。這里不詳細(xì)討論程序集和項(xiàng)目(如果你想全面了解有關(guān)程序集,項(xiàng)目,命名空間等東東,可以去看看這里),你可以大致理解,一個項(xiàng)目可以是一

18、個程序集。public、private、proteced我覺得非常比較好理解,麻煩點(diǎn)就是Internal,只能在一個項(xiàng)目中使用,不能跨項(xiàng)目調(diào)用,只能自己的項(xiàng)目內(nèi)使用,即使是子類也不能訪問。以上的代碼表明Internal是不能跨項(xiàng)目訪問的。對于protectedinternal簡單些理解,就是protected和internal的并集。protected就只能被子類內(nèi)部所訪問,于是它們的并集就是:同一個項(xiàng)目內(nèi)或者子類內(nèi)部可以訪問。如果既不是同一程序集也不是子類,就無法訪問。如下面的代碼所示:2、類修飾符:abstract:標(biāo)識一個類只能作為其它類的基類.sealed:標(biāo)識一個類不能被繼承.partial:局部類。將你的class分為多個部分,編譯器會將多個部分拼合在一起。關(guān)于局部類部分你可以看看這里3、成員修飾符:abstract:指示該方法或?qū)傩詻]有實(shí)現(xiàn).const:指定域或局部變量的值不能被改動.event:聲明一個事件.extern:指示方法在外部實(shí)現(xiàn).override:對由基類繼承成員的新實(shí)現(xiàn).readonly:指示一個域只能在聲明時以及相同類的內(nèi)部被

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論