溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#基礎(chǔ)之?dāng)U展方法

發(fā)布時(shí)間:2020-07-23 20:42:09 來源:網(wǎng)絡(luò) 閱讀:455 作者:夢(mèng)小羅馬 欄目:開發(fā)技術(shù)

擴(kuò)展方法使您能夠向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。 擴(kuò)展方法是一種特殊的靜態(tài)方法,但可以像擴(kuò)展類型上的實(shí)例方法一樣進(jìn)行調(diào)用。 對(duì)于用 C# 和 Visual Basic 編寫的客戶端代碼,調(diào)用擴(kuò)展方法與調(diào)用在類型中實(shí)際定義的方法之間沒有明顯的差異。 --- 摘自MSDN

下面我們自己定義一個(gè)A類和Program類來為string擴(kuò)展方法

 public static class A
    {
        public static int Test(this string s)
        {

            return 1;
        }

        public static int IndexOf(this string s, char c)
        {
            return 1;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int a = A.Test("sds");
            int c = "sds".Test();
            Console.WriteLine(a);
            Console.WriteLine(c);

            int b = A.IndexOf("asdfg", 'd');
            Console.WriteLine(b);
            int d = "asdfg".IndexOf('d');
            Console.WriteLine(d);
        }
    }

擴(kuò)展方法很簡(jiǎn)單,就是在參數(shù)類型前面加this,就為當(dāng)前參數(shù)的類型增加了擴(kuò)展方法,但是必須在靜態(tài)類中聲明靜態(tài)方法(想要擴(kuò)展的方法).以上例子為string類擴(kuò)展了Test方法和indexof方法(string中有同名方法),運(yùn)行結(jié)果為1 1 1 2,由此可以推論 擴(kuò)展的方法如果和string類中的方法重名,則會(huì)執(zhí)行string類中的方法,而不會(huì)執(zhí)行擴(kuò)展方法,再讓我們來看看反編譯的結(jié)果C#基礎(chǔ)之?dāng)U展方法

由此更可以確定 執(zhí)行的是string中的方法,再看上面的兩個(gè)調(diào)用,可以觀察到調(diào)用的都是A類中的靜態(tài)方法,和string類并無多大關(guān)聯(lián),也可以得出擴(kuò)展方法是不能調(diào)用string中的私有變量和方法,所以 string類也不用重新編譯.

對(duì)擴(kuò)展類總結(jié)下:

    擴(kuò)展方法不改變?cè)斜粩U(kuò)展類代碼,不用重新編譯被擴(kuò)展類.

    不能訪問被擴(kuò)展類的私有成員,當(dāng)和同名方法重名時(shí)優(yōu)先執(zhí)行原方法

    引用一個(gè)類庫,但是我們沒有該類庫的源代碼,那么我們可以使用擴(kuò)展方法 ,使用擴(kuò)展方法進(jìn)行類的擴(kuò)展。

          



第一次寫博文,望大神多多指點(diǎn).

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI