概述

  扩展方法是一种特殊的静态方法,可以像扩展类型上的实例方法一样进行调用能向现有类型“添加”方法,而无须创建新的派生类型、重新编译或以其他方式修改原始类型

扩展方法的定义实现:

      public static class StringUtil
      {
          public static void WriteSelf(this string strSelf, int year)
          {
              Console.WriteLine(string.Format("我是{0}人,今年是{1}年。", strSelf, year));
          }
      }

扩展方法的调用:

            string str = "冷水江";
            str.WriteSelf(2016);      //在编译时会将 str.WriteSelf(2016) 替换成:StringUtil.WriteSelf(str, 2018);

    编译器认为一个表达式要使用一个实例方法,但是没有找到,需要检查导入的命名空间和当前命名空间里所有的扩展方法,并匹配到适合的方法。

注意:

  (1)实例方法优先于扩展方法(允许存在同名实例方法和扩展方法)

  (2)可以在空引用上调用扩展方法。

  (3)可以被继承。

  (4)并不是任何方法都能作为扩展方法使用,必须有以下特征:

      它必须放在一个非嵌套、非泛型的静态类中

      它至少有一个参数。

      第一个参数必须附加 this 关键字

      第一个参数不能有任何其他修饰符(out/ref)

      第一个参数不能是指针类型,其类型决定是在何种类型上进行扩展