網(wǎng)頁版微信二維碼登錄怎么實(shí)現(xiàn)榆林seo
參數(shù)列表中this的這種用法是在.NET 3.0之后新增的一種特性---擴(kuò)展方法。通過這個(gè)屬性可以讓程序員在現(xiàn)有的類型上添加擴(kuò)展方法(無需創(chuàng)建新的派生類型、重新編譯或者以其他方式修改原始類型)。
擴(kuò)展方法是一種特殊的靜態(tài)方法,雖然是靜態(tài)方法,但是可以像使用類型上的實(shí)例方法一樣去使用擴(kuò)展方法(調(diào)用擴(kuò)展方法與調(diào)用在類型中實(shí)際定義的方法之間沒有明顯的差異)。
擴(kuò)展方法的第一個(gè)參數(shù)指定該方法作用于哪個(gè)類型,并且該參數(shù)以this修飾符為前綴。
當(dāng)你在其他命名空間使用時(shí),需要用using將擴(kuò)展方法所在命名空間顯式導(dǎo)入到源代碼中。
擴(kuò)展方法必須在非范型靜態(tài)類中定義。
擴(kuò)展方法無法訪問擴(kuò)展類型中的私有變量。
可以使用擴(kuò)展方法來擴(kuò)展類或接口,但不能重寫擴(kuò)展方法。
與接口或類方法具有相同名稱和簽名的擴(kuò)展方法永遠(yuǎn)不會(huì)調(diào)用(這一點(diǎn)要牢記)。編譯時(shí),擴(kuò)展方法的優(yōu)先級總是比類型本身中定義的實(shí)例方法低。換句話說,如果某個(gè)類型具有一個(gè)名為Process(int i)的方法,而你有一個(gè)具有相同簽名的擴(kuò)展方法,則編譯器總是綁定到該實(shí)例方法。當(dāng)編譯器遇到方法調(diào)用時(shí),它首先在該類型的實(shí)例方法中尋找匹配的方法。如果未找到任何匹配方法,編譯器將搜索為該類型定義的任何擴(kuò)展方法,并且綁定到它找到的第一個(gè)擴(kuò)展方法。
通常建議你只在不得已的情況下才實(shí)現(xiàn)擴(kuò)展方法,并謹(jǐn)慎地實(shí)現(xiàn)。只要有可能,必須擴(kuò)展現(xiàn)有類型的情形都應(yīng)該通過創(chuàng)建從現(xiàn)有類型派生新類型來達(dá)到這一目的。
在使用擴(kuò)展方法來擴(kuò)展你無法更改其源代碼的類型時(shí),你需要承受該類型實(shí)現(xiàn)中的更改會(huì)導(dǎo)致擴(kuò)展方法失效的風(fēng)險(xiǎn)。
在代碼中,可以使用實(shí)例方法語法調(diào)用擴(kuò)展方法。但是,編譯器生成的中間語言(IL)會(huì)將代碼轉(zhuǎn)換為對靜態(tài)方法的調(diào)用。因此,并未真正違反封裝原則。實(shí)際上,擴(kuò)展方法無法訪問他們所擴(kuò)展的類型中的私有變量。
又看到一篇不錯(cuò)的博客:
https://www.cnblogs.com/zhaopei/p/5678842.html