扩展方法

        扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型,而且不需要修改原本的类的程序代码。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。它们的第一个参数指定该方法作用于哪个类型,
并且该参数以 this 修饰符为前缀。

        要实现扩展方法十分简单,首先决定要为哪个类实现扩展方法,接着建立一个静态类(static class),名称建议使用“要扩展的类名称”+Extension 字样,例如像扩展Int 方法,就将类命名为Int32Extension;要扩展DateTime,就命名为DateTimeExtension。接下来在类内加入要扩展的方法,但要注意两件事:
     (1)必须是静态方法,且名称不可以和现有的方法冲突。
     (2)至少要有一个扩展类型输入参数,扩展类型输入参数格式必须是“this[要扩展的类名称][参数名称]”,若有两个以上的参数,则扩展                  类型输入参数必须放在第一个,且不能设置默认值。

     下面是一个例子,想要扩展int 和double 两个对象,分为赋予产生货币字符串与百分比字符串的功能,按照扩展方法的规则,先定义Int32Extension 与DoubleExtension 两个类,并声明为static class

  public static class Int32Extension
  {
       public  static string FormatForMoney(this int Value)
       {
            return Value.ToString("$###,###,###,##0");
       }
  }
  public static class DoubleExtension
  {
       public static string FormatPercent(this doubel Value)
       {
            return Value.ToString("0.00%");
       }
  }

 

  using System;

  using static System.Console;
 
  namespace ExtensionTest
  {
      class Program
      {
          static void Main(string[] args)
          {
              int money = 12456789;
              double p = 0.123456;
 
              WriteLine("{0}",money.FormatForMoney());
              WriteLine("{0}", p.FormatPercent());
          }
      }
  }

1.如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。

2.针对已实现的类库,不应为了避免程序集的版本号递增而使用扩展方法。一般没有源代码,如果想对现有类进行扩展,可用扩展方法。

   如果要向你拥有源代码的库中添加重要功能,应遵循适用于程序集版本控制的标准 .NET Framework 准则。

3.若要使用不同命名空间内的扩展方法,记得要加上命名空间声明(使用using),否则编译器会找不到扩展方法的类。

https://www.cnblogs.com/rinack/p/5695067.html

http://m.zhizuobiao.com/net/net-18111400139/

原文地址:https://www.cnblogs.com/lu-yuan/p/11344277.html