• C#中的扩展方法


      当你有下面这样一个需求的时候:在项目中,类A需要添加功能,我们想到的就是在类A中添加公共方法,这个显而易见肯定可以。但是由于某种原因,你不能修改类A本身的代码(如类来自第三方,而我没有源码),但是又必须需要增加功能到类A中去,怎么办? 这个时候扩展方法(Extension Methods)就会帮助你完成上述功能了。

    一个例子:来自于《精通ASP.NET MVC5》

         /// <summary>
        /// 商品类
        /// </summary>
        public class Product
        {
            public string Name { get; set; }
            public decimal Price { get; set; }
        }
        /// <summary>
        /// 购物车
        /// </summary>
        public class ShoppingCart
        {
            public List<Product> Products { get; set; }
        }

    我们希望购物车可以添加一个计算总价的功能,但是我们不能自己修改购物车的类,怎么办呢?直接上代码

     1     public static class MyExtensionMethods
     2     {
     3         // 这里定义扩展方法
     4         public static decimal TotalPrices(this ShoppingCart cart)
     5         {
     6            return cart.Products.Sum(p => p.Price);
     7         }
     8     }
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             ShoppingCart myCart = new ShoppingCart
    14             {
    15                 Products=new List<Product>
    16                 {
    17                     new Product{Name="apple",Price=1M},
    18                     new Product{Name="orange",Price=2M},
    19                     new Product{Name="banana",Price=3M},
    20                     new Product{Name="pear",Price=4M},
    21                 }
    22             };
    23             //ShoppingCart的实例myCart可以调用扩展方法 TotalPrices()
    24             decimal totalPrices = myCart.TotalPrices();
    25             Console.WriteLine($"总价格是:{totalPrices}");
    26             Console.ReadKey();
    27         }
    28     }

      其实,扩展方法(Extension Methods)当然需要一个类包装,这个类必须是静态类,扩展方法(Extension Methods)必须也是静态方法,方法的参数中必须要有被扩展类,此参数前面用 this 关键字修饰。

  • 相关阅读:
    用户控件赋值
    计算一串数字中每个数字出现的次数
    如何理解c和c++的复杂类型声明
    STM32 NVIC学习
    stm32f10x_flash.c中文版
    IBM中国研究院Offer之感言——能力是一种态度
    对于STM32别名区的理解 (转载)
    STM32时钟学习之STM3210X_RCC.H解读
    STM32 DMA
    STM32 内部时钟输出PA.8(MCO)
  • 原文地址:https://www.cnblogs.com/wyy1234/p/9290374.html
Copyright © 2020-2023  润新知