1》》》
在委托实例前,不加event,那这个委托就是一个普通的委托,我们可以用别的函数调用,也可以直接用对象调用,但加上关键字之后,只能用成员函数调用
- public delegate void MyButtonEventHandler(string msg);
- public class MyButton
- {
- public MyButtonEventHandler Click;
- private string msg;
- public void OnClick()
- {
- if (Click
!= null)
- {
- Click("我点击了:" +
msg);
- }
- }
- //构造函数
- public MyButton(string msg)
- {
- this.msg =
msg;
- }
- }
- MyButton
mb = new MyButton("MyButton对象");
- //指定点击按钮后的处理方法
- mb.Click
+= MyButton_Click;
- mb.Click("Click为公共委托对象,可任意触发执行委托方法,而无需触发OnClick方法");
- //点击按钮触发委托方法
- //mb.OnClick();
- //响应处理方法
- private void MyButton_Click(string msg)
- {
- Response.Write(msg);
- }
使用event关键字:
- //定义一委托类型
- public delegate void MyButtonEventHandler(string msg);
- public class MyButton
- {
- //定义一委托实例(事件)
- public event MyButtonEventHandler
Click;
- private string msg;
- ///
- ///
用于触发Click事件(模拟点击按钮)
- ///
- public void OnClick()
- {
- if (Click
!= null)
- {
- Click("我点击了:" +
msg);
- }
- }
- //构造函数
- public MyButton(string msg)
- {
- this.msg =
msg;
- }
- }
- MyButton
mb = new MyButton("MyButton对象");
- mb.Click
+= MyButton_Click;
- //以下报错
- //mb.Click("Click为虽公共委托对象,但不可随意执行委托方法,因为有event关键字修饰!");
- //点击按钮后才触发委托方法(保证只有MyButton对象才可触发该事件)
- mb.OnClick();
2》》》》》》》
delegate
委托
event 事件
事件是特殊的委托,是多播委托,可以添加多个事件处理函数,但是委托只能绑定一个处理函数。
c#中的delegate是Observe(观察者)设计模式的一种实现,以多播委托为底层支持,且是类型安全的。
event就是delegate的一种应用。加上ev
C# 关键字Event
原文:http://www.cnblogs.com/xiaofengfeng/p/3547915.html