C#高级程序设计(一)——从接口到代理到匿名方法到lambda表达式
来源:互联网 发布:日语班 知乎 编辑:程序博客网 时间:2024/05/18 02:28
问题背景:使用Sort方法对Product对象进行排序。
下面是Sort方法的两个签名:
public void Sort(Comparison<T> comparison);public void Sort(IComparer<T> comparer);
其中一个是接收实现了IComparer<T>接口的对象,另一种是接收Comparison<T>代理。
一、使用接口对象
class ProductNameComparer : IComparer<Product>{public int Compare(Product x, Product y){return x.Name.CompareTo(y.Name);}}...List<Product> products = Product.GetSampleProducts();products.Sort(new ProductNameComparer());foreach (Product product in products){Console.WriteLine(product);}
二、使用代理
public int Compare(Product x, Product y){ return x.Name.CompareTo(y.Name);}List<Product> products = Product.GetSampleProducts();products.Sort(Compare);foreach (Product product in products){Console.WriteLine(product.Name);}
思考:接口和代理究竟有怎样的区别和联系?
接口是类/对象的契约,代理是方法的契约;接口对象只能指向实现了接口的类对象,代理对象只能指向实现了方法签名的方法。
三、匿名方法
匿名方法是代理的进一步扩展,它能将代码块传递给代理对象。下面使用匿名方法对上面代码进行改写。
List<Product> products = Product.GetSampleProducts();products.Sort(delegate(Product x, Product y){ return x.Name.CompareTo(y.Name); });foreach (Product product in products){Console.WriteLine(product);}
四、lambda表达式
lambda表达式是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托和表达式树类型,下面使用lambda表达式对上面代码进行改写。
List<Product> products = Product.GetSampleProducts();products.Sort((x, y) => x.Name.CompareTo(y.Name));foreach (Product product in products){Console.WriteLine(product);}
- C#高级程序设计(一)——从接口到代理到匿名方法到lambda表达式
- 从委托到匿名方法,再到Lambda表达式
- 从Delegate,匿名方法到Lamdba表达式
- C#高级程序设计(八)——Lambda表达式
- C#高级程序设计(六)——匿名方法
- 从Lambda表达式到Linq查询
- 从委托到lambda表达式介绍
- Lambda表达式从入门到精通(转)
- C#学习笔记—程序集-从基础到高级
- c#之委托、匿名方法、Lambda表达式
- C# 匿名方法和Lambda表达式
- C#匿名方法和Lambda表达式
- C# 委托用法、匿名方法、Lambda表达式
- C# 匿名方法和Lambda表达式
- GDB程序调试从初级到高级(一)
- 从函数指针到代理(C#代理入门)
- 从函数指针到代理(C#代理入门)
- runtime从入门到精通(三)—— runtime常用接口方法
- JDBCExceptionReporter:100 - SQL Error: xxx, SQLState: xxxxx
- java 对象的串行化(Serialization)
- html笔记
- PHPExcel:用于Excel等文档生成的PHP开源类库
- Cocos2d-x跨Android&iOS平台开发入门
- C#高级程序设计(一)——从接口到代理到匿名方法到lambda表达式
- JS编辑圣器--Microsoft Script Editor的安装
- oracle 查看所有用户及密码 实现Oracle查询用户所有表
- Mongo数据库搭建
- content=”IE=7, IE=9″意思理解(转自http://www.jqueryba.com/)
- C++命名空间
- xpage中报表生成
- StarUML学习笔记----管理项目
- debian下编译PTAM