首页 > 代码库 > 委托是怎么最终变成linq表达式的?(下)
委托是怎么最终变成linq表达式的?(下)
扩展方式(Extension Method)是给那些不是你拥有的,因而不能直接修改的类添加方法的一种方便的方法。首先我们定义一个类
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Rocky{ public class Product { public int ProductID { set; get; } public string Name { set; get; } public string Description { set; get; } public decimal Price { set; get; } public string Category { set; get; } }}
上述定义了一个组织数据的实体类 接下来我们定义一个购物车类型
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Rocky{ public class ShoppingCar { public List<Product> Products { set; get; } }}
这个购物车类型里面只有一个字段就是商品的集合Porducts 现在我们需要求出商品价格的总值,但我们不能对这个类进行修改。那么我们可以利用扩展方法来完成。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Rocky{ public static class MyExtensionMethod //public修饰 静态类 { public static decimal TotalPrices(this ShoppingCar car)//静态方法 第一个参数必须是this修饰要扩展的类名 { decimal total = 0; foreach (var item in car.Products) { total += item.Price; } return total; } }}
最终我们看一下运行起来的结果
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Rocky{ class Program { static void Main(string[] args) { ShoppingCar cart = new ShoppingCar { Products = new List<Product> { new Product{Name="kaka", Price=234M}, new Product{Name="Messic", Price=211M}, new Product{Name="lisi",Price=12M} } }; decimal total = cart.TotalPrices(); Console.WriteLine("Total:{0}",total); Console.ReadKey(); } }}
对接口运用扩展方法
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Rocky{ public class ShoppingCar:IEnumerable<Product> { public List<Product> Products { set; get; } public IEnumerator<Product> GetEnumerator() { return Products.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } }}
扩展接口方法
public static decimal TotalPrices(this IEnumerable<Product> prods) { decimal total = 0; foreach (var item in prods) { total += item.Price; } return total; }
结果是
IEnumerable<Product> cart = new ShoppingCar { Products = new List<Product> { new Product{Name="kaka", Price=234M}, new Product{Name="Messic", Price=211M}, new Product{Name="lisi",Price=12M} } }; Console.WriteLine("Total:{0}",cart.TotalPrices()); Console.ReadKey(); }
通过扩展方法结果可以看出接口运用扩展方法。
最后我们要演示的一种扩展方法是,它可以对对象集合进行过滤
委托是怎么最终变成linq表达式的?(下)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。