C#當中的擴展方法


  先說有用的,c#擴展方法結論:

  擴展方法能夠向現有類型“添加”方法,而無需創建新的派生類型,重新編譯或以其他方式修改原始類型。擴展方法必須是靜態方法,可以像實例方法一樣進行調用。且調用同名中實際定義的方法優先級要高於擴展方法。

  先來個簡單的例子:

public static class test
    {
        public static int CountYourNumber(this string str)
        {
            return str.Split(new char[] {' ','.','?' },
                StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

  這里我定義了一個測試類,CountYourNumber方法作為string類型的擴展方法。當中第一個參數前面出現一個this,這表示對string中添加擴展方法,在調用該接口時,可以調用到該擴展方法。

        public static void testMethod()
        {
            string s = "Hello Extension Methods,I`m learning you";
            int alphabetNum = s.CountYourNumber();
        }

  這里alphabetNum接收到的是s的字母數量。s是定義的一個字符串,這里可以看出,我們自己寫的擴展方法可以在這里調用,會有一個(擴展)字樣,注意這里調用方法時不需要傳參數。截圖:

  在我們實際應用中也很廣泛,舉個我們常用的例子:linq標准查詢,或者找到Queryable類,截圖如下:

  這些都是微軟寫好的擴展方法,注意:這些方法里的第二個參數是需要在擴展方法里傳入的第一個參數。Expression<func<TSourse,int>> selector這種是需要傳入一個lambda表達式的。而第一個參數,就是需要擴展的類。

分割線------------------------------------------------------------------

  擴展方法與其擴展的類之間並沒有什么本質的聯系,最終編譯器還是將擴展方法轉化成靜態類的靜態方法調用,所以擴展方法不能訪問相應類的私有字段和私有方法;至於為什么使用靜態類的靜態方法,有一種說法是這樣效率相對較高,同時擴展方法作為其他類的擴展,本身類的實例化沒有什么意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM