程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#擴展方法-摘自msdn,

c#擴展方法-摘自msdn,

編輯:C#入門知識

c#擴展方法-摘自msdn,


擴展方法使你能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。  對於用 C# 和 Visual Basic 編寫的客戶端代碼,調用擴展方法與調用在類型中實際定義的方法之間沒有明顯的差異。

擴展方法編寫代碼:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}

1.必需為靜態方法

2.第一個參數為向哪個類型添加擴展方法(this 類型名稱 行參名稱)

調用時引入命名空間:

using ExtensionMethods;

調用擴展方法與調用在類型中實際定義的方法之間沒有明顯的差異:

string s = "Hello Extension Methods";
int i = s.WordCount();

注意:在代碼中,可以使用實例方法語法調用該擴展方法。  但是,編譯器生成的中間語言 (IL) 會將代碼轉換為對靜態方法的調用。  因此,並未真正違反封裝原則。  實際上,擴展方法無法訪問它們所擴展的類型中的私有變量。

可以使用擴展方法來擴展類或接口,但不能重寫擴展方法。 與接口或類方法具有相同名稱和簽名的擴展方法永遠不會被調用。  編譯時,擴展方法的優先級總是比類型本身中定義的實例方法低。  換句話說,如果某個類型具有一個名為 Process(int i) 的方法,而你有一個具有相同簽名的擴展方法,則編譯器總是綁定到該實例方法。當編譯器遇到方法調用時,它首先在該類型的實例方法中尋找匹配的方法。  如果未找到任何匹配方法,編譯器將搜索為該類型定義的任何擴展方法,並且綁定到它找到的第一個擴展方法。

通常,建議你只在不得已的情況下才實現擴展方法,並謹慎地實現。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved