您的位置:首页 > 编程语言 > C#

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: