亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

C# 擴(kuò)展方法

顧名思義,擴(kuò)展方法是附加方法。擴(kuò)展方法使您可以注入其他方法,而無需修改,派生或重新編譯原始類,結(jié)構(gòu)或接口??梢詫U(kuò)展方法添加到您自己的自定義類,.NET Framework類或第三方類或接口中。

擴(kuò)展方法的定義

擴(kuò)展方法是C# 3.0 中新增特性,可在不修改源類代碼情況,通過ADD File 模式對(duì)源代碼功能擴(kuò)展。

擴(kuò)展方法要求如下:

  • 擴(kuò)展方法需包含在 static 修飾類中。

  • 擴(kuò)展實(shí)現(xiàn)需是靜態(tài)形式。

  • 擴(kuò)展方法第一個(gè)參數(shù) 前綴為 this , 表示需要擴(kuò)展類對(duì)象,從第二個(gè)參數(shù)開始,為擴(kuò)展方法參數(shù)列表。

在以下示例中,IsGreaterThan()是int類型的擴(kuò)展方法,如果int變量的值大于提供的整數(shù)參數(shù),則返回true。

int i = 10;

bool result = i.IsGreaterThan(100); //返回FALSE

IsGreaterThan ()方法不是 int 數(shù)據(jù)類型的方法(Int32 struct)。它是程序員為 int 數(shù)據(jù)類型編寫的擴(kuò)展方法。通過包含定義 IsGreaterThan ()擴(kuò)展的命名空間,IsGreaterThan ()擴(kuò)展方法將在整個(gè)應(yīng)用程序中可用。

 擴(kuò)展方法在Visual Studio的intellisense中具有特殊符號(hào),因此您可以輕松區(qū)分類方法和擴(kuò)展方法。

擴(kuò)展方法圖標(biāo)
Visual Studio智能感知中的擴(kuò)展方法符號(hào)

編寫擴(kuò)展方法

現(xiàn)在讓我們看看如何編寫擴(kuò)展方法。

LINQ建立在對(duì)IEnumerable和IQeryable類型進(jìn)行操作的擴(kuò)展方法上。

擴(kuò)展方法實(shí)際上是在靜態(tài)類中定義的一種特殊的靜態(tài)方法。要定義擴(kuò)展方法,首先,定義一個(gè)靜態(tài)類。

例如,在以下示例中,我們?cè)?ExtensionMethods 命名空間下創(chuàng)建了一個(gè)類 IntExtensions。IntExtensions 類將包含適用于int數(shù)據(jù)類型的所有擴(kuò)展方法。(您可以為命名空間和類使用任何名稱。)

namespace ExtensionMethods
{
    public static class IntExtensions
    {

    }
}

現(xiàn)在,將靜態(tài)方法定義為擴(kuò)展方法,其中擴(kuò)展方法的第一個(gè)參數(shù)指定了適用擴(kuò)展方法的類型。我們將在int類型上使用此擴(kuò)展方法。因此,必須在第一個(gè)參數(shù) int 之前加上this 修飾符。

例如,IsGreaterThan()方法對(duì)int進(jìn)行操作,因此第一個(gè)參數(shù)為this int i。

namespace ExtensionMethods
{
    public static class IntExtensions
     {
        public static bool IsGreaterThan(this int i, int value)
        {
            return i > value;
        }
    }
}

現(xiàn)在,您可以將 ExtensionMethods 命名空間包含在任何希望使用此擴(kuò)展方法的地方。

使用擴(kuò)展方法

using ExtensionMethods;

class Program
{
    static void Main(string[] args)
    {
        int i = 10;

        bool result = i.IsGreaterThan(100); 

        Console.WriteLine(result);
    }
}
輸出:
false
常規(guī)靜態(tài)方法和擴(kuò)展方法之間的唯一區(qū)別是,擴(kuò)展方法的第一個(gè)參數(shù)指定其將要對(duì)運(yùn)算符進(jìn)行操作的類型,其后跟 this 關(guān)鍵字。

擴(kuò)展方法的原則總結(jié)

  1. C#只支持?jǐn)U展方法,不支持?jǐn)U展屬性、擴(kuò)展事件、擴(kuò)展操作符等。

  2. 擴(kuò)展方法(第一個(gè)參數(shù)前面是this的方法)必須在非泛型的靜態(tài)類中聲明,擴(kuò)展方法必須有一個(gè)參數(shù),而且只有第一個(gè)參數(shù)使用this標(biāo)記。

  3. C#編譯器查找靜態(tài)類中的擴(kuò)展方法時(shí),要求這些靜態(tài)類本身必須具有文件作用域。

  4. C#編譯要求“導(dǎo)入”擴(kuò)展方法。(靜態(tài)方法可以任意命名,C#編譯器在尋找方法時(shí),需要花費(fèi)時(shí)間進(jìn)行查找,需要檢查文件作用域中的所有的靜態(tài)類,并掃描它們的所有靜態(tài)方法來查找一個(gè)匹配)

  5. 多個(gè)靜態(tài)類可以定義相同的擴(kuò)展方法。
    用一個(gè)擴(kuò)展方法擴(kuò)展一個(gè)類型時(shí),同時(shí)也擴(kuò)展了派生類型。

擴(kuò)展方法聲明

  • 必須在一個(gè)非嵌套的、非泛型的靜態(tài)類中(所以必須是一個(gè)靜態(tài)方法)

  • 至少有一個(gè)參數(shù)。

  • 第一個(gè)參數(shù)必須附加this關(guān)鍵字做前綴。

  • 第一個(gè)參數(shù)不能有其他任何修飾符(如ref或out)。

  • 第一個(gè)參數(shù)的類型不能是指針類型。

要記住的要點(diǎn)

  • 擴(kuò)展方法是最初不包含在類中的其他自定義方法。

  • 擴(kuò)展方法可以添加到自定義,.NET Framework或第三方類,結(jié)構(gòu)或接口。

  • 擴(kuò)展方法的第一個(gè)參數(shù)必須是適用擴(kuò)展方法的類型,其后跟this關(guān)鍵字。

  • 通過包含擴(kuò)展方法的名稱空間,可以在應(yīng)用程序中的任何位置使用擴(kuò)展方法。