摘要: 我们可以对Car类型做最后一步改进,以符合asp.net里的事件模式。查看基类库中某个类型发送的事件时,会发同底层委托的第一个参数是一个System.Object,第二个参数是一个派生自System.Eventargs的类型。System.Object参数表示不念旧恶对发送事件的对象(例子如Car对象)的引用,第二个参数则表示与该事件相关的信息。System.Eventargs基类表示一个不发送任何自定义信息的事件:public class EventArgs{ public static readonly System.EventArgs Empty; public Even... 阅读全文
posted @ 2013-07-15 23:12 DBNull 阅读(245) 评论(0) 推荐(1) 编辑
摘要: 委托确实是一个有趣的结构,它允许内存中的对象进行双向对话。然而,你可能会同意,从头使用委托会有一些重复代码(定义托委,声明必要的成员变量,以及创建自定义的注册/注销方法来保护封装等)。 除了时间之外,这样使用委托来作为应用程序的回调机制会有另一个问题是:如果我们没有反委托成员变量定义为私有的,调用者就可以直接访问委托对象。这样,调用者就可以把变量赋值为新的委托对象(实际上也就删除了当前要调用的方法列表),更糟糕的是,调用者可以直接调用委托的调用列表。为说明这个问题请看如下代码:public class Car{ //一个委托 public delegate void Expl... 阅读全文
posted @ 2013-07-15 22:30 DBNull 阅读(300) 评论(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 阅读(213) 评论(1) 推荐(1) 编辑