第七章 命名空間和預(yù)處理_第1頁
第七章 命名空間和預(yù)處理_第2頁
第七章 命名空間和預(yù)處理_第3頁
第七章 命名空間和預(yù)處理_第4頁
第七章 命名空間和預(yù)處理_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章命名空間和預(yù)處理第一頁,共十九頁,2022年,8月28日第七章命名空間和預(yù)處理主要內(nèi)容7.1命名空間7.2預(yù)處理第二頁,共十九頁,2022年,8月28日7.1命名空間

命名空間(namespace)定義了一個聲明區(qū)域,它提供了將一組名稱與另一組名稱進(jìn)行區(qū)別的方法。本質(zhì)上,就是使得一個命名空間中的名稱不會與另一個命名空間中相同的名稱沖突。前面的程序中我們使用了.NET的命名空間System。 在過去的幾年里,在類庫、第三方控件及用戶代碼中出現(xiàn)了大量的類、方法、屬性,因此命名空間就顯得十分重要了。如果不區(qū)分命名空間,那么索引的名稱就只能共享同一個全局空間,進(jìn)而不可避免地引發(fā)命名沖突。比如,如果用戶在自己的命名空間中定義了類Sort,它可能與第三方類庫中的Sort類相沖突。幸運(yùn)的是,命名空間可以避免這樣的沖突發(fā)生,它可以限制聲明在其中的名稱的可見性。第三頁,共十九頁,2022年,8月28日7.1命名空間7.1.1命名空間的聲明 使用namespace關(guān)鍵字可以聲明一個命名空間,其基本形式為: namespacens_name { //members } 其中,ns_name是命名空間的名稱。所有定義在命名空間中的內(nèi)容都被限制在該命名空間的范圍內(nèi)。因此,命名空間實際上定義了一個范圍。members是命名空間的成員列表,在命名空間中用戶可以定義類、結(jié)構(gòu)體、委托、枚舉、接口或另一個命名空間等成員。例P7_1。第四頁,共十九頁,2022年,8月28日7.1命名空間7.1.1命名空間的聲明

命名空間的作用在于,在一個命名空間中聲明的名稱不會與其他命名空間中聲明的同名的名稱產(chǎn)生沖突。例P7_2。7.1.2using命令 如果程序需要頻繁地引用某個命名空間中定義的成員,那么如果每次都指定命名空間就很麻煩。使用using命名可以解決這個問題。前面的例子中我們使用using來引入.NET的命名空間System。此外,用戶定義的命名空間也可以使用using引入。using指令有兩種形式,如下:第五頁,共十九頁,2022年,8月28日7.1命名空間7.1.2using命令 usingns_name;//形式一 或 usingalias=ns_name;//形式二 其中ns_name是命名空間的名稱,alias是為命名空間指定的別名。例如: usingCounter; usingCC=Counter;第六頁,共十九頁,2022年,8月28日7.1命名空間7.1.3嵌套的命名空間 一個命名空間可以聲明在另一個命名空間中,稱為命名空間的嵌套。例P7_3。 另外,使用單個namespace也可以嵌套命名空間,方法是使用句點將每一個命名空間隔開。例如: namespaceNS1.NS2 {//members} 例P7_3的另一種表示形式。第七頁,共十九頁,2022年,8月28日7.1命名空間7.1.4使用命名空間限定符“::” 盡管命名空間可以幫助避免命名沖突,但不能完全消除這種沖突。如果在兩個不同的命名空間中聲明了同名的成員。如果兩個不同的命名空間中聲明了同名的成員,而應(yīng)用程序又同時引入了這兩個命名空間,就會發(fā)生名稱沖突。在這種情況下,我們可以使用命名空間限定符::來顯示地指定希望使用的命名空間。命名空間限定符::是C#2.0中新引入的功能。 ::運(yùn)算符的基本形式為: namespace_alias::identifier 其中,namespace_alias是命名空間的別名,identifier是該命名空間中成員的名稱。例P7_4。第八頁,共十九頁,2022年,8月28日7.1命名空間7.1.4使用命名空間限定符“::” 例P7_4中創(chuàng)建了兩個命名空間,Counter1和Counter2。這兩個命名空間中都定義了CountDown類,并且都被using語句引入程序。因此,在Main方法中使用下面的語句創(chuàng)建對象cd的時候就會出現(xiàn)錯誤,其原因在于兩個命名空間Counter1和Counter2中都定義了類CountDown,并且都被引入到程序中。在使用下面的語句創(chuàng)建CountDown類型的對象cd時,到底該使用哪一個命名空間中的類CountDown,編譯系統(tǒng)無法確定,從而產(chǎn)生二義性錯誤。為解決這樣的錯誤,就必須使用::運(yùn)算符來實現(xiàn)。 CountDowncd=newCountDown(); 使用運(yùn)算符::,必須先為要限定的命名空間定義一個別名。接著使用別名來限定具有二義性錯誤的元素即可。第九頁,共十九頁,2022年,8月28日7.2預(yù)處理

C#定義了多個預(yù)處理指令,它們可以改變編譯系統(tǒng)解釋源程序文件的方式。在把程序翻譯為目標(biāo)代碼之前,預(yù)處理指令首先對源文件中的文本產(chǎn)生作用,即編譯哪些文本。C#中所有的預(yù)處理指令都以#開頭,并且每個預(yù)處理指令都單獨占用一行。C#2.0中的預(yù)處理指令如表7-1所示。表7-1C#預(yù)處理指令#define#elif#else#endif#endregion#error#if#line#program#region#undef#warning第十頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.1#define指令

#define指令用于定義一個稱為符號(symbol)的字符序列。#if和#elif指令可以判斷某個符合是否已經(jīng)存在,并據(jù)此控制編譯過程。#define指令的基本形式如下: #definesymbol 注意,這里沒有以分號結(jié)束,因為它不是C#的語句,而是一個預(yù)處理指令。#define和symbol之間至少要用一個空格隔開。C#該指令不同于C和C++中的#define指令(C、C++中是用來定義宏的)。 例如: #defineWindows第十一頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.2#if、#elif、#else和#endif指令

#if指令的基本形式如下: #ifsymbol_expression_1 statement_sequence_1 #elifsymbol_expression_2 statement_sequence_2 #else statement_sequence_n #endif第十二頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.2#if、#elif、#else和#endif指令

其中,symbol_expression_i是一個symbol或多個symbol構(gòu)成的邏輯表達(dá)式。如果表達(dá)式的值為真,則編譯statement_sequence_i,如果所有的symbol_expression都為假,則編譯statement_sequence_n 例P7_5第十三頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.3#undef指令

#undef指令可以取消之前定義的符號,基本形式如下: #undefsymbol 例如: #defineSMALL //這個位置之前SMALL是被定義的 #ifSMALL #undefSMALL //這個位置之后SMALL就沒有定義了第十四頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.4#error指令

#error指令主要用于調(diào)試,它可以迫使編譯器停止編譯。該指令的基本形式如下: #errorerror_message 其中,error_message是錯誤信息。例如: #errorAnerroroccurredhere!7.2.5#warning指令 #warning類似于#error,不過它產(chǎn)生的是警告消息而不是錯誤消息。因此,編譯過程不會停止。其基本形式如下: #warningwarning_message第十五頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.6#line指令

#line指令可以為它所在的文件設(shè)置行號和文件名。編譯過程中如果出現(xiàn)錯誤或警告就會用到這里的行號和文件名。#line指令的基本形式為: #linenumber"filename" 其中,number是任意的正整數(shù),它用作新行的行號??蛇x的filename表示一個任意有效的文件標(biāo)識符,它被用作新的文件名。#line主要用于調(diào)試和特殊的應(yīng)用程序。 #line指令還有兩個選秀,一個是default,它根據(jù)原來的位置返回行號。其用法為: #linedefault 另一個是hidden,在逐步調(diào)試一個程序的時候,hidden選項允許編譯器跳過該指令與下一個不包含hidden選項的#line指令之間的行。其用法如下: #linehidden第十六頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.7#region和#endregion指令

#region和#endregion用于定義一個區(qū)域,該區(qū)域可以在VisualStudioIDE的大綱視圖中被擴(kuò)展或收縮。其基本形式如下: #regionregion_name //code #endregion其中,region_name用于指定區(qū)域的名稱第十七頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.8#program指令

#program指令是C#2.0新增的,它用于給出指令,例如為編譯器指定選項。其基本形式如下: #programoption 其中,option是傳遞給編譯器的指令。 在C#2.0中,#program支持兩個選項。一個是warning,它用于啟用或禁用某個具體的編譯器警告。對于的命名如下: #programwarningdisablewarnings//禁用警告 #programwarningrestorewarnings//啟用警告第十八頁,共十九頁,2022年,8月28日7.2預(yù)處理7.2.8#program指令

其中,warnings是一個逗號分隔的警告編號列表。例如: #progr

溫馨提示

  • 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

提交評論