C#中扩展方法

   什么是扩展方法,在MSDN解释是:扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。             扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

  什么意思呢?我们在给一个DLL扩展功能的时候,可以通过直接修改源代码添加所需要的功能,但是有很多时候我们是无法修改源代码,此时有想实现功能扩展就需要使用扩展方法了

扩展方法的实现其实很简单。需要的条件为:

  1. 一个静态类
  2. 静态类中定义一个静态方法,该方法就是我们需要扩展的方法
  3. 静态方法的第一个参数为需要扩展的类型,并且使用 this 作为前导词

例如:

 1 public static class ExternalMethod
 2     {
 3         public static int ExtIsRange(this int t, int min, int max)
 4         {
 5             int result = 0;
 6             if (t < min)
 7             {
 8                 result = -1;
 9             }
10             else if (result > max)
11             {
12                 result = 1;
13             }
14             else
15             {
16                 result = 0;
17             }
18             return result;
19         }
20 
21         public static string ToString(this int t)
22         {
23             return "This is an extension of the method, but never call";
24         }
25     }

      上面就是一个典型的扩展方法例子,该方法定义了一个静态类 ExternalMethod 在该类中定义了两个扩展方法 一个是 ExtIsRange 一个是 ToString ,这两个方法的方法定义中的第一个参数都是 (this int t),就说明这两个方法都是对int类型进行的扩展。

  上例中,我们将ToString方法也进行了扩展,大家应该知道,ToString方法在System.Object类型中有定义,并且Int类型也将该方法进行了重写,所有在Int的实例中就有ToString的方法定义,此时我们无论如何调用都不会触发我们的 ToString 扩展方法,这是因为如果扩展类型中有和扩展方法同名的方法,则优先调用类型中定义的方法,而扩展方法就不会被调用。

  扩展方法的调用

  扩展方法的调用和普通类型实例调用一样

1 public class TestExtMethod
2     {
3         public static void main()
4         {
5             int age = 54;
6             Console.Write(age.ExtIsRange(20, 40));
7         }
8     }

  上例中定义了整型类型 age 之后age调用了刚刚定义的扩展方法 ExtIsRange ,调用方法和其他整型方法调用一样。

原文地址:https://www.cnblogs.com/yunfeiqi/p/4344154.html