C#委托——基础2
2015-11-29 17:43
495 查看
在上一篇随笔中,简要说明了怎样定义委托,定义事件,订阅事件,最后也实现了效果,就是当员工类的某个对象,执行某个事件时,委托事件被触发,后面也得到了结果,但是想象一下实际场景中,如果办公室有员工玩游戏了,这个时候,我们要找到是谁,在哪个位置玩游戏,而不是向所有人广播有人玩游戏了,这样并没有什么意义。因此,需要对上篇的代码进行改进,所以就要想办法传递参数,参数中需要包含必要的信息。
在本例中,关于参数,首先创建了一个参数类,CustomeEvebtArgs且继承自EventArgs(这个我看的例子人家就是这样说的“是包含事件数据的类的基类”)
用这个参数类的对象去保存相关信息。而此时此刻,员工类就应当对应有姓名和座位号了,代码同上。
此时,委托事件函数就应当带有定义委托时的上述两个参数了
这个时候this代表的是该实例,也就是触发委托事件的实例。e则是该实例中的参数信息,其中e的初始化如下:
只要定义员工对象初始化后,被初始化的信息就作为参数被传递
注意:处理事件的函数其函数前面一定要和委托定义时相同,如上所示。而上面的参数也可以用多种方式,既可以用参数类对象的属性表示,也可以用触发事件的实例的属性表示。
当然事件被触发后,也可以被多个函数处理,比如添加一个“罚工资”的函数
staticvoidpenalty(objectsender,CustomeEvebtArgse)
{
Console.WriteLine("罚款100");
}
这样只需我的委托函数关联上该函数即可
e.PlayGame+=newDelegateClassHandle(penalty);这里我没有重新创建一个类,而是直接将该函数作为静态函数,让委托直接调用函数名,而在定义该函数时不要忘了和定义委托时要有同样的参数
在本例中,关于参数,首先创建了一个参数类,CustomeEvebtArgs且继承自EventArgs(这个我看的例子人家就是这样说的“是包含事件数据的类的基类”)
publicclassCustomeEvebtArgs:EventArgs//参数类 { stringname="";//员工姓名 intnumber=0;//所在办公室编号 publicCustomeEvebtArgs() { } publicstringName { get{returnthis.name;} set{this.name=value;} } publicintNumber { get{returnthis.number;} set{this.number=value;} } }
用这个参数类的对象去保存相关信息。而此时此刻,员工类就应当对应有姓名和座位号了,代码同上。
//定义一个委托(打小报告的狐狸) ///</summary> ///<paramname="sender">触发事件的源</param> ///<paramname="e">触发时间所携带的参数</param> publicdelegatevoidDelegateClassHandle(objectsender,CustomeEvebtArgse);
此时,委托事件函数就应当带有定义委托时的上述两个参数了
PlayGame(this,e);
这个时候this代表的是该实例,也就是触发委托事件的实例。e则是该实例中的参数信息,其中e的初始化如下:
CustomeEvebtArgse=newCustomeEvebtArgs(); e.Name=_name; e.Number=_number;
只要定义员工对象初始化后,被初始化的信息就作为参数被传递
publicvoidNotify(objectsender,CustomeEvebtArgse) { Console.WriteLine("报告老板,{0}在{1}玩游戏哦",e.Name,((Employee)sender).Number); }
注意:处理事件的函数其函数前面一定要和委托定义时相同,如上所示。而上面的参数也可以用多种方式,既可以用参数类对象的属性表示,也可以用触发事件的实例的属性表示。
当然事件被触发后,也可以被多个函数处理,比如添加一个“罚工资”的函数
staticvoidpenalty(objectsender,CustomeEvebtArgse)
{
Console.WriteLine("罚款100");
}
这样只需我的委托函数关联上该函数即可
e.PlayGame+=newDelegateClassHandle(penalty);这里我没有重新创建一个类,而是直接将该函数作为静态函数,让委托直接调用函数名,而在定义该函数时不要忘了和定义委托时要有同样的参数
相关文章推荐
- C# string类常用的几种方法
- C#----计算器例子
- C#方法重载
- C#委托——基础1
- C# virtual, base, override
- C#构造方法
- c#之再战委托事件多线程2_委托和事件结合降低模块低耦合
- C#小结(一)
- c#之再战委托事件多线程1_仅仅是委托
- C#中sealed关键字
- C#与C++的混合编程 之三 C++与C#的数据传递与类型转换
- C#与C++的混合编程 之二 使用非托管dll 导出标准函数
- 【C#】用组件的Anchor属性解决最大化组件的缩放问题
- C#与C++的混合编程 之一 方法介绍
- 【C#】文件选择对话框OpenFileDialog与下列列表ComboBox
- 【CS】——C#初识
- C#开篇
- WCF 之角色验证
- C#-高血压生活习惯数据模拟
- BC#64 4.Tree