C# - 扩展方法

本文关键字:方法 扩展 | 更新日期: 2023-09-12 17:38:51

顾名思义,扩展方法是其他方法。扩展方法允许您注入其他方法,而无需修改、派生或重新编译原始类、结构或接口。可以将扩展方法添加到您自己的自定义类、.NET 框架类或第三方类或接口中。

在下面的示例中,IsGreaterThan() 是 int 类型的扩展方法,如果 int 变量的值大于提供的整数参数,则返回 true。

Example: Extension Method

int i = 10;
bool result = i.IsGreaterThan(100); //returns false 

IsGreaterThan()方法不是 int 数据类型(Int32 结构)的方法。它是程序员为 int 数据类型编写的扩展方法。IsGreaterThan() 扩展方法将在整个应用程序中可用,方法是包含已在其中定义它的命名空间。

扩展方法在 Visual Studio 的智能感知中具有特殊符号,以便可以轻松区分类方法和扩展方法。

Visual Studio 智能感知中的扩展方法符号

现在让我们看看如何编写扩展方法。

扩展方法实际上是在静态类中定义的一种特殊静态方法。要定义扩展方法,首先要定义一个静态类。

例如,在以下示例中,我们在 ExtensionMethods 命名空间下创建了一个 IntExtensions 类。类将包含适用于 int 数据类型的所有扩展方法。(可以为命名空间和类使用任何名称。

Example: Create a Class for Extension Methods

namespace ExtensionMethods
{
    public static class IntExtensions
    {
    }
}

现在,将静态方法定义为扩展方法,其中扩展方法的第一个参数指定扩展方法适用的类型。我们将在 int 类型上使用这个扩展方法。因此,第一个参数前面必须带有 this 修饰符。

例如,IsGreaterThan() 方法对 int 进行操作,因此第一个参数将是 this int i

Example: Define an Extension Method

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

现在,您可以在要使用此扩展方法的任何位置包含 ExtensionMethods 命名空间。

Example: Extension method

using ExtensionMethods;
class Program
{
    static void Main(string[] args)
    {
        int i = 10;
        bool result = i.IsGreaterThan(100); 
        Console.WriteLine(result);
    }
}

输出:

false

注意: 常规静态方法和扩展方法之间的唯一区别是,扩展方法的第一个参数指定它将要对其进行运算符的类型,前面是 this 关键字。

注意:

  1. 扩展方法是最初未包含在类中的附加自定义方法。
  2. 扩展方法可以添加到自定义,.NET Framework或第三方类,结构或接口中。
  3. 扩展方法
  4. 的第一个参数必须是扩展方法适用的类型,前面是 this 关键字。
  5. 通过包含扩展方法的命名空间,可以在应用程序中的任何位置使用扩展方法。