• 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 ,调用方法和其他整型方法调用一样。

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/yunfeiqi/p/4344154.html
Copyright © 2020-2023  润新知