zoukankan      html  css  js  c++  java
  • 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 关键字修饰。

  • 相关阅读:
    使用RSA实现客户端和后台的非对称加密
    PHP异步并行网络扩展swoole安装
    rvm is not a function的解决方法
    python中的sort(),sorted()的用法
    RESTful框架中的Mixin中的五个类视图
    RESTful框架的API请求流程
    理解RESTful架构
    Django中的admin管理工具
    一个程序员的自我介绍--英文版
    Django中的认证系统
  • 原文地址:https://www.cnblogs.com/wyy1234/p/9290374.html
Copyright © 2011-2022 走看看