c# event关键字的意义
2014-03-05 15:28
253 查看
C#中事件是基于委托。
不使用event关键字定义委托实例对象:
[c-sharp] view
plaincopy
//定义一委托类型
public delegate void MyButtonEventHandler(string msg);
//定义MyButton类,模拟按钮对象
public class MyButton
{
//定义一委托实例
public MyButtonEventHandler Click;
private string msg;
/// <summary>
/// 用于触发Click事件(模拟点击按钮)
/// </summary>
public void OnClick()
{
if (Click != null)
{
Click("我点击了:" + msg);
}
}
//构造函数
public MyButton(string msg)
{
this.msg = msg;
}
}
[c-sharp] view
plaincopy
MyButton mb = new MyButton("MyButton对象");
//指定点击按钮后的处理方法
mb.Click += MyButton_Click;
/* * * * * * * * * * * * * * * * * * * * * * * *
注意:
作为一个按钮,本身正常的业务逻辑是:点击按钮后,执行响应处理方法
但由于mb.Click没有使用event关键字,只作为一公开普通委托实例对象
因此无需点击,就可任意执行处理方法,这显然不是我们所期望的^-^
* * * * * * * * * * * * * * * * * * * * * * * * */
mb.Click("Click为公共委托对象,可任意触发执行委托方法,而无需触发OnClick方法");
//点击按钮触发委托方法
//mb.OnClick();
//响应处理方法
private void MyButton_Click(string msg)
{
Response.Write(msg);
}
使用event关键字:
[c-sharp] view
plaincopy
//定义一委托类型
public delegate void MyButtonEventHandler(string msg);
public class MyButton
{
//定义一委托实例(事件)
public event MyButtonEventHandler Click;
private string msg;
/// <summary>
/// 用于触发Click事件(模拟点击按钮)
/// </summary>
public void OnClick()
{
if (Click != null)
{
Click("我点击了:" + msg);
}
}
//构造函数
public MyButton(string msg)
{
this.msg = msg;
}
}
[c-sharp] view
plaincopy
MyButton mb = new MyButton("MyButton对象");
mb.Click += MyButton_Click;
//以下报错
//mb.Click("Click为虽公共委托对象,但不可随意执行委托方法,因为有event关键字修饰!");
//点击按钮后才触发委托方法(保证只有MyButton对象才可触发该事件)
mb.OnClick();
(转自:http://blog.csdn.net/lulu_jiang/article/details/6451300)
不使用event关键字定义委托实例对象:
[c-sharp] view
plaincopy
//定义一委托类型
public delegate void MyButtonEventHandler(string msg);
//定义MyButton类,模拟按钮对象
public class MyButton
{
//定义一委托实例
public MyButtonEventHandler Click;
private string msg;
/// <summary>
/// 用于触发Click事件(模拟点击按钮)
/// </summary>
public void OnClick()
{
if (Click != null)
{
Click("我点击了:" + msg);
}
}
//构造函数
public MyButton(string msg)
{
this.msg = msg;
}
}
[c-sharp] view
plaincopy
MyButton mb = new MyButton("MyButton对象");
//指定点击按钮后的处理方法
mb.Click += MyButton_Click;
/* * * * * * * * * * * * * * * * * * * * * * * *
注意:
作为一个按钮,本身正常的业务逻辑是:点击按钮后,执行响应处理方法
但由于mb.Click没有使用event关键字,只作为一公开普通委托实例对象
因此无需点击,就可任意执行处理方法,这显然不是我们所期望的^-^
* * * * * * * * * * * * * * * * * * * * * * * * */
mb.Click("Click为公共委托对象,可任意触发执行委托方法,而无需触发OnClick方法");
//点击按钮触发委托方法
//mb.OnClick();
//响应处理方法
private void MyButton_Click(string msg)
{
Response.Write(msg);
}
使用event关键字:
[c-sharp] view
plaincopy
//定义一委托类型
public delegate void MyButtonEventHandler(string msg);
public class MyButton
{
//定义一委托实例(事件)
public event MyButtonEventHandler Click;
private string msg;
/// <summary>
/// 用于触发Click事件(模拟点击按钮)
/// </summary>
public void OnClick()
{
if (Click != null)
{
Click("我点击了:" + msg);
}
}
//构造函数
public MyButton(string msg)
{
this.msg = msg;
}
}
[c-sharp] view
plaincopy
MyButton mb = new MyButton("MyButton对象");
mb.Click += MyButton_Click;
//以下报错
//mb.Click("Click为虽公共委托对象,但不可随意执行委托方法,因为有event关键字修饰!");
//点击按钮后才触发委托方法(保证只有MyButton对象才可触发该事件)
mb.OnClick();
(转自:http://blog.csdn.net/lulu_jiang/article/details/6451300)
相关文章推荐
- DynamicMethod:更接近IL
- C#命令行编译器csc.exe编译HelloWorld程序
- C#快速汇出DataTable到Excel文件
- C#获取PDF文件的创建版本
- C#实现归并排序
- c#生成图片缩略图或按比例压缩图片
- 常用的C#正则表达式
- C#中文分词算法:ChineseAnalyzer
- C#中的crc16校验
- C#中数据类型分类
- workflow是什么?
- C#多线程编程
- 理解结构和类的不同之处
- C# 委托
- C#—Devexpress barManager静态文本去掉分割线/分隔符
- 该不该在C#中使用var关键词
- C#日期函数的使用
- C#的dll被其他程序调用时,获取此dll正确的物理路径
- 博弈游戏(2)-c#求解-英雄会在线编程题目
- C# 获取 mp3文件信息(tag信息)