的代码:employee.PlayGame += new DelegateClassHandle(admin.Notify);通过DelegateClassHandle将两个类的交互进行了绑定,当employee.Games方法调用后,触发PlayGame事件,而该事件将被委托给admin的Notify方法处理,通知董事长有雇员在上班时间玩游戏。但董事长并不满足这种简单的通知,他还想知道究竟是谁在上班时间违反规定。显然,现在委托对象必须传递必要的参数才行,这个要求也可以很容易地办到。事件的参数可以设置为任何类型的数据,在.NET框架中,还提供了事件参数基类EventArgs专门用于传递事件数据。从该EventArgs类派生一个自定义的事件参数类CustomeEventArgs,这个类型将携带雇员姓名和年龄信息:public class CustomeEvetnArgs : EventArgs{ string name = ""; int age = 0; public CustomeEvetnArgs() { } public string Name { get { return this.name; } set { this.name = value; } } public int Age { get { return this.age; } set { this.age = value; } }}修改委托类型DelegateClassHandle的定义,让其携带必要的参数:public delegate void DelegateClassHandle(object sender, CustomeEvetnArgs e);雇员类的代码修改后如下:public class Employee{ private string _name; public string Name { get { return _name; } set { _name = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } public event DelegateClassHandle PlayGame; public void Games() { if (PlayGame != null) { CustomeEvetnArgs e = new CustomeEvetnArgs(); e.Name = this._name ; e.Age = this._age; PlayGame(this, e); } }}在Games方法中,首先新建一个CustomeEventArgs对象,然后设置了必要的属性Name和Age。董事长的通知方法也必须相应地进行修改:public class Admin{ public void Notify(object sender, CustomeEvetnArgs e) { System.Console.WriteLine(e.Name+" is "+e.Age.ToString()); }}将两个类型对象进行关联的代码也需要进行相应的修改:Employee employee = new Employee();employee.Name = "Mike&q