随笔分类 -  委托、事件、Lambda

摘要:C#支持内联处理事件,通过直接把一段代码语句赋值给事件(使用匿名方法),而不是构建被底层委托调用的独立方法。Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.net委托类型的使用。 为了对Lambda表达式的研究做准备,先看如下program类型的新方法:static void AnonymousMethodSyntax(){ //建立整数列表 List list=new List(); list.AddRange(new int[]{20,1,4,8,9,44}); //现在使用匿名方法 List evenNumbers=list.FindAll... 阅读全文
posted @ 2013-07-18 23:22 DBNull 阅读(372) 评论(0) 推荐(1)
摘要:委托确实是一个有趣的结构,它允许内存中的对象进行双向对话。然而,你可能会同意,从头使用委托会有一些重复代码(定义托委,声明必要的成员变量,以及创建自定义的注册/注销方法来保护封装等)。 除了时间之外,这样使用委托来作为应用程序的回调机制会有另一个问题是:如果我们没有反委托成员变量定义为私有的,调用者就可以直接访问委托对象。这样,调用者就可以把变量赋值为新的委托对象(实际上也就删除了当前要调用的方法列表),更糟糕的是,调用者可以直接调用委托的调用列表。为说明这个问题请看如下代码:public class Car{ //一个委托 public delegate void Expl... 阅读全文
posted @ 2013-07-15 22:30 DBNull 阅读(307) 评论(0) 推荐(1)
摘要:复杂的委托示例 为了说明更高级的委托使用方法,首先创建一个名为CarGarage的控制台应用程序项目,其中必须包含Car/Radio类型。让我们修改Car类使之包含两个新的布尔成员变量。一个用来决定是否应该洗车(isDirty);另一个表示该汽车是否需要互换轮胎(shouldRotate)。为了便于对象用户使用新的状态数据,Car类还定义了一些新属性并修改了构造函数。代码如下://修改后的Car类public class Car{ ... //我们需要清洗它吗?需要轮胎互换吗? private bool isDirty; private bool shouldRotat... 阅读全文
posted @ 2013-07-15 21:47 DBNull 阅读(222) 评论(1) 推荐(1)
摘要:使用委托改造Car类型定义将通知发送给调用者的委托类型。声明Car类中每个委托类型的成员变量在Car上创建辅助函数使调用者能够指定由委托成员变量保存的方法修改Accelerate()方法以适当的情形下调用委托的调用列表。public calss Car{ //定义委托变量 public delegate void AboutToBlow(string msg); public delegate void Exploded(string msg); //定义每个委托类型的成员变量 private AboutToBlow almostDeadList; private... 阅读全文
posted @ 2013-07-13 00:44 DBNull 阅读(237) 评论(0) 推荐(1)
摘要:这几天认真研究了C#的委托与事件,下面对研究的知识总结一下,N年后找出来看一下应该也不错。 历史上,Windows API经常使用C语言风格的函数指针来创建称为回调函数或简称为回调的实体。使用回调,码农可以使一个函数返回报告给(即回调)程序中的另一个函数。 在.NET Framework里,回调仍是可能的,它们的功能是由使用更为安全和面向对象的委托(delegate)来完成的。本质上来讲,委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。委托类型包含3个得要的信息:它所调用的方法的名称;该方法的参数(可选);该方法的返回值(可选); 当一个委托被创建并提供... 阅读全文
posted @ 2013-07-13 00:31 DBNull 阅读(436) 评论(0) 推荐(1)