zoukankan      html  css  js  c++  java
  • 扩展方法

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

  • 相关阅读:
    [干货向]用Javascript获取页面元素的位置
    从 JavaScript 数组去重谈性能优化
    《悟透javascript》中的知识点
    深入理解javascript闭包
    深入理解Javascript之执行上下文(Execution Context)
    CSS Sprites的原理
    深入理解JavaScript定时机制
    防范sql注入式攻击的比较有见地的代码(PHP)
    PHP(authcode)加密解密
    预防数据库攻击
  • 原文地址:https://www.cnblogs.com/lu-yuan/p/11344277.html
Copyright © 2011-2022 走看看