【转载】---地址:http://blog.csdn.net/lulu_jiang/article/details/6451300
不使用event关键字定义委托实例对象:
//定义一委托类型
public delegate void MyButtonEventHandler(string msg);
//定义MyButton类,模拟按钮对象<pre name="code" class="csharp">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);
}
<pre name="code" class="csharp">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关键字:
//定义一委托类型
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;
}
}
MyButton mb = new MyButton("MyButton对象");
mb.Click += MyButton_Click;
//以下报错
//mb.Click("Click为虽公共委托对象,但不可随意执行委托方法,因为有event关键字修饰!");
//点击按钮后才触发委托方法(保证只有MyButton对象才可触发该事件)
mb.OnClick();