新聞中心
C# 3.0語言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# 3.0擴(kuò)展重載抉擇,包括介紹調(diào)用實(shí)例方法Func等方面。

創(chuàng)新互聯(lián)服務(wù)項目包括清水河網(wǎng)站建設(shè)、清水河網(wǎng)站制作、清水河網(wǎng)頁制作以及清水河網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,清水河網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到清水河省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
C# 3.0擴(kuò)展重載抉擇
看了上面的介紹我們不難發(fā)現(xiàn)一個問題:如果一個類型中的某個實(shí)例方法與擴(kuò)展方法的簽名等價(這里說“等價”是因?yàn)閿U(kuò)展方法與調(diào)用形式一樣的實(shí)例方法相比,要多一個表示被擴(kuò)展類型的參數(shù),也就是***個有this修飾符的參數(shù)),那么當(dāng)在被擴(kuò)展類型的對象上調(diào)用方法時,就會產(chǎn)生沖突。我們將這種沖突稱為重載抉擇問題。C# 3.0擴(kuò)展重載抉擇,將對擴(kuò)展方法的調(diào)用也納入到重載抉擇的范疇之內(nèi),并且規(guī)定擴(kuò)展方法擁有***的優(yōu)先級。也就是說,對于一組特性類型、特定順序的參數(shù)列表,只有當(dāng)被擴(kuò)展類型中沒有得以匹配的方法時,才考慮從擴(kuò)展方法中選擇一個最合適的方法進(jìn)行調(diào)用。
現(xiàn)在,我們?yōu)樯厦娴腟ampleExtensions類再添加一個用于擴(kuò)展SampleClass類型的擴(kuò)展方法Func:
- public static void Func(this SampleClass s)
- {
- s.Val = -1;
- Console.WriteLine("Am I appearing?");
- }
如果用調(diào)用實(shí)例方法的語法調(diào)用這個擴(kuò)展方法,則其調(diào)用形式與調(diào)用無參的實(shí)例方法Func完全一致。再次編譯并運(yùn)行原來的程序,輸出的結(jié)果并沒有改變,也就是說這個擴(kuò)展方法根本沒有被調(diào)用,實(shí)際被調(diào)用的方法是實(shí)例方法Func。當(dāng)然,如果將這個擴(kuò)展方法作為普通的靜態(tài)方法進(jìn)行調(diào)用是沒有問題的。
另外如果兩個靜態(tài)類中為同一個類型定義了簽名一致的靜態(tài)方法,則***定義的靜態(tài)方法具有較高的優(yōu)先級;而同一程序集中定義的靜態(tài)方法優(yōu)先級高于用using語句從其他命名空間中導(dǎo)入的擴(kuò)展方法;***,如果兩個命名空間中包含簽名一致的擴(kuò)展方法,則***引入的命名空間中的擴(kuò)展方法優(yōu)先級較高。以上介紹C# 3.0擴(kuò)展重載抉擇
分享標(biāo)題:C#3.0擴(kuò)展重載抉擇
文章源于:http://fisionsoft.com.cn/article/cdpjcej.html


咨詢
建站咨詢
