委托与事件机制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通过这样的机制, 一个事件可以有多个订阅者, 从而可以实现点击 button 可以响应多个方法。
委托,顾名思义,委托给别人。
事件, “发布者 / 订阅者 ” 模式,发布者发布一个事件,订阅者订阅这个事件,当事件触发时, 就会通知订阅者。通知这个过程是通过委托来实现的。
大家想象一下这个情景, 经理 有一个 项目 ,计划 A 君负责美工方面, B 君负责程序方面, 将项目一分为二;于是一天,在用餐的时候 告诉 他们这个计划。
public class CustomEventArgs : EventArgs
{
public CustomEventArgs() // 构造函数
{}
}
声明事件 public event OneThing DoThing;
那么要要定义一个触发事件的原因:假设当输入文本为 触发事件。
“你们两个把这件事做完 ”( @5)就
de.DoThing += new DelegateExample.OneThing(de.DoOtherHห้องสมุดไป่ตู้lfThing);
当 DoThing 被触发时,就会委托给 DohalfThing 和 DoOtherHalfThing 两个函数。
为这两个被委托的方法书写函数体
public void DoHalfThing(
定义一个 Text 属性
public string Text {
get {
return _text; }
set {
_text = value;
if (_text ==
" 你们两个把这件事做完 " )
this .DoThing( this , new CustomEventArgs());
else
Console.WriteLine(
所有代码
class DelegateExample
{
string _text;
public
delegate void OneThing( object sender, CustomEventArg
s e);
public
event OneThing DoThing;
public string Text
发布者:经理
---------@2
订阅者订阅这个事件原因: A,B 君是经理的部下 -------------@3
事件:经理分配了 A,B 一个项目 -------------@4
触发事件的原因:经理有个计划 ----------------@5
通知方式(委托): ”在用餐的时候告诉 “方式 ----------------@6
public delegate void OneThing( object sender, CustomEventArgs e); 定义一个委托,返回值 为空,委托名 OneThing ,相当于 @1 中的 EventHandler ,有两个参数分别为触发事件的对 象和事件信息。 Custom EventArgs 必须继承于 EventArgs
object sender, DelegateExample.CustomE
ventArgs e)
{
Console.WriteLine( }
" 好的,我只做一半,另一半给别人做吧
" );
public void DoOtherHalfThing(
object sender, DelegateExample.C
" 你没有触发事件 " );
} }
一旦触发事件就要通过委托机制来告诉订阅者
DelegateExample de = new DelegateExample();
//DelegateExample 一个类,详见源代码
de.DoThing += new DelegateExample.OneThing(de.DoHalfThing);
Button1.Click+= new EventHandler(Button1_Click);-----------------@1
大家都熟悉的一段代码, Button1.Click 是事件(也可以说是一条委托链), EventHandler 是委托, Button1_Click 是订阅事件的人,也可以说是委托的人。
{
get
{
return _text;
}
set
{
_text = value;
ustomEventArgs e)
{
Console.WriteLine(
" 好的,另一半就交给我好了 " );
}
注意其中的参数要和声明委托时相同
总的一个过程是,
输入 “你们两个把这件事做完 ”, 触发事件 DoThing 由于 DoThing 注册了事件处理事件(委托给)两个函数。所以执行了两个函数。