c# 方法:分布、擴(kuò)展、匿名和普通方法

c# 方法:分布、擴(kuò)展、匿名和普通方法

ID:12546804

大?。?2.67 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2018-07-17

c# 方法:分布、擴(kuò)展、匿名和普通方法_第1頁(yè)
c# 方法:分布、擴(kuò)展、匿名和普通方法_第2頁(yè)
c# 方法:分布、擴(kuò)展、匿名和普通方法_第3頁(yè)
c# 方法:分布、擴(kuò)展、匿名和普通方法_第4頁(yè)
c# 方法:分布、擴(kuò)展、匿名和普通方法_第5頁(yè)
資源描述:

《c# 方法:分布、擴(kuò)展、匿名和普通方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、c#方法:分布、擴(kuò)展、匿名和普通方法一.概述:萬(wàn)事萬(wàn)物皆對(duì)象,孫悟空是個(gè)對(duì)象,他會(huì)摘桃子,是一種行為,這種行為就是c#中的方法,方法是有指定功能的代碼塊。說(shuō)起方法就得說(shuō)一下方法的簽名:修飾符、返回值類(lèi)型、方法參數(shù)。在定義方法時(shí)的參數(shù)叫“形式參數(shù)(形參)”,在調(diào)用方法時(shí)的參數(shù)叫“實(shí)際參數(shù)(實(shí)參)”。這些基本了解之后,下面開(kāi)始談幾類(lèi)方法:分布、擴(kuò)展、匿名和普通方法。二.分布方法:要說(shuō)分布方法要先說(shuō)分布類(lèi):在VisualStudio中創(chuàng)建一個(gè)Windows窗體應(yīng)用程序,打開(kāi)窗體Form1的代碼部分和Fo

2、rm1.Designer.cs文件,如圖Form1類(lèi)的修飾符有個(gè)partial關(guān)鍵字,沒(méi)錯(cuò),partial關(guān)鍵字就是表示此類(lèi)或此方法為分布類(lèi)或分布方法的,上面的例子把分布類(lèi)或分布方法的好處已經(jīng)體現(xiàn)了:可以讓一個(gè)類(lèi)分布在多個(gè)文件,這樣就可以讓多個(gè)程序員編寫(xiě)了,也可以讓一個(gè)類(lèi)的幾個(gè)功能塊分布在多個(gè)文件中。注意:a.partial關(guān)鍵字只能修飾類(lèi)、結(jié)構(gòu)或方法。分布方法只能存在于分布類(lèi)或分布結(jié)構(gòu)中。b.partial是VisualStudio的關(guān)鍵字,不是C#語(yǔ)法的關(guān)鍵字。在最終編譯的時(shí)候,分布類(lèi)會(huì)統(tǒng)一編

3、譯成一個(gè)類(lèi),如果分布方法未提供該實(shí)現(xiàn),則會(huì)在編譯時(shí)移除方法以及對(duì)方法的所有調(diào)用。c.各個(gè)部分必須具有相同的可訪問(wèn)性,如public、private等。d.如果將任意部分聲明為抽象的,則整個(gè)類(lèi)型都被視為抽象的,如果將任意部分聲明為密封的,則整個(gè)類(lèi)型都被視為密封的,如果任意部分聲明基類(lèi)型,則整個(gè)類(lèi)型都將繼承該類(lèi)。指定基類(lèi)的所有部分必須一致,但忽略基類(lèi)的部分仍繼承該基類(lèi)型,各個(gè)部分可以指定不同的基接口,最終類(lèi)型將實(shí)現(xiàn)所有分部聲明所列出的全部接口。e.分部方法聲明必須以上下文關(guān)鍵字partial開(kāi)頭,并且

4、方法必須返回void。f.分部方法可以有ref參數(shù),但不能有out參數(shù)。g.分部方法為隱式private方法,因此不能為virtual方法。h.分部方法不能為extern方法,因?yàn)橹黧w的存在確定了方法是在定義還是在實(shí)現(xiàn)。i.分部方法可以有static和unsafe修飾符。j.分部方法可以為泛型的。約束將放在定義分部方法聲明上,但也可以選擇重復(fù)放在實(shí)現(xiàn)聲明上。參數(shù)和類(lèi)型參數(shù)名稱(chēng)在實(shí)現(xiàn)聲明和定義聲明中不必相同。a.不能將委托轉(zhuǎn)換為分部方法。一.?dāng)U展方法:擴(kuò)展方法使您能夠向現(xiàn)有類(lèi)型“添加”方法,而無(wú)需創(chuàng)

5、建新的派生類(lèi)型、重新編譯或以其他方式修改原始類(lèi)型。擴(kuò)展方法必須是靜態(tài)的,第一個(gè)參數(shù)指定該方法作用于哪個(gè)類(lèi)型,并且該參數(shù)以this修飾符為前綴。舉例說(shuō)明:namespaceHelloWorld{usingIamExtend;classProgram{staticvoidMain(string[]args){stringstr="helloworld";Console.WriteLine(str.IamExt());//helloworld,IamExtend}}}namespaceIamExtend

6、{staticclassExtString{publicstaticstringIamExt(thisstringstr){str+=",IamExtend";returnstr;}}}細(xì)心的話會(huì)有一個(gè)疑問(wèn):IamExt是靜態(tài)方法,而在調(diào)用的時(shí)候是變量str點(diǎn)出來(lái)的,能用變量點(diǎn)出來(lái)的方法不是實(shí)例化方法嗎?在這里,不是!擴(kuò)展方法是一種特殊的靜態(tài)方法,但在代碼中可以像擴(kuò)展類(lèi)型上的實(shí)例方法一樣進(jìn)行調(diào)用,實(shí)際上,編譯器生成的中間語(yǔ)言(IL)會(huì)將代碼轉(zhuǎn)換為對(duì)靜態(tài)方法的調(diào)用。深入思考一下:類(lèi)有封裝性,而上例中

7、的string是由微軟定義,并且已經(jīng)封裝,而擴(kuò)展類(lèi)ExtString和string并沒(méi)有繼承關(guān)系,那么既然string已經(jīng)封裝,但現(xiàn)在還可以為它增加方法,是不是違反了類(lèi)的封裝性呢?不是!實(shí)際上,擴(kuò)展方法無(wú)法訪問(wèn)它們所擴(kuò)展的類(lèi)型中的私有變量,擴(kuò)展方法對(duì)它們所擴(kuò)展的類(lèi)型中的所有所有成員相互之間無(wú)異常,所擴(kuò)展的類(lèi)型中的方法或?qū)傩允莗ublic的能訪問(wèn),是private還是不能訪問(wèn),不干擾,無(wú)影響。注意:a.如果擴(kuò)展方法與該類(lèi)型中定義的方法具有相同的簽名,則擴(kuò)展方法永遠(yuǎn)不會(huì)被調(diào)用。a.擴(kuò)展方法被放在命名空

8、間級(jí)別放入范圍中。例如,如果您在同一個(gè)名為Extensions的命名空間中具有多個(gè)包含擴(kuò)展方法的靜態(tài)類(lèi),則這些擴(kuò)展方法將全部由usingExtensions;指令放入范圍中。一.匿名方法:1.先看一個(gè)例子:匿名方法就是dText=delegate(){Console.WriteLine("helloworld");};等號(hào)右邊的。說(shuō)一下專(zhuān)業(yè)名詞:如果局部變量和參數(shù)的范圍包含匿名方法聲明,則該局部變量和參數(shù)稱(chēng)為該匿名方法的“外部”變量2.匿名方法的定義就不多說(shuō)了,注意:a.匿名方法的

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。