zoukankan      html  css  js  c++  java
  • 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 ,调用方法和其他整型方法调用一样。

  • 相关阅读:
    树莓派摄像头直播程序,非常希望有贡献者一起玩
    Ansible 操作windows
    Python实现自平衡二叉树AVL
    Python非递归遍历多叉树
    Python 非递归遍历图
    使用ffmpeg进行网络直播
    Python安装mysqldb
    运维工程师速成
    科幻小说《霜与火》 by 雷·布雷德伯里
    jvm 内存调整
  • 原文地址:https://www.cnblogs.com/yunfeiqi/p/4344154.html
Copyright © 2011-2022 走看看