C# 关键字Event
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