您的位置:首页 > 其它

今天对于自定义事件与方法的区别有了一点感性的认识

2009-03-14 00:51 585 查看
从刚开始学.net没多久,就开始关注自定义事件、委托等知识点。

由于做的项目一直比较小,这些知识点也就一直没有怎么用,所以一直是抹零两可的。

以前网上查到的资料都是过于理论化,比如说:事件可以把方法做为参数传递,事件只声明了要调用方法(具体调用哪个不确定)等等

--------------------------------------------------------------------------------------------------------------------------

今天在网上找资料复习一下类的继承,看的例子中使用了自定义事件,而且是一个很简单的自定义事件。

整理以后的代码如下:

protected void Page_Load(object sender, EventArgs e)

{

book b = new book();

b.RenChenged += new book.RenChengHender(b_RenChenged);

Response.Write(b.Price.ToString());

}

private class book

{

public delegate void RenChengHender(); //定义一个委托

public event RenChengHender RenChenged; //定义一个事件

private float price = 1;

public float Price

{

get

{

RenChenged();//如果读取这个值,将激发事件

return price;

}

}

}

private void b_RenChenged()

{

Response.Write("读取了价格<br />");

}
现在问题出现了,在上面的例子中,我完全可以不用这么麻烦使用自定义事件,而直接在Price属性get的时候调用b_RenChenged()方法,这样不是更简单吗?

这个是很多时间以来一直困扰我的一个问题。

忽然之间,我今天突然想明白了,就以上这个功能实现来说,的确两种方法的结果是一样的,似乎直接调用b_RenChenged()方法比用自定义事件要简单。

但是,我认为区别就在于:当Price属性get的时候,是由谁来指定使用b_RenChenged()方法的?

如果说,整个代码只由一个人来写,不考虑其他因素,上面当然可以直接调用b_RenChenged()方法。

但如果,写Book类的人是Mr.A,而负责写Page_Load代码的人是Mr.B。Mr.A只管设计当Price属性被get的时候,能触发一个事件,事件具体是做什么他不管。而Mr.B只需要了解,当get Price的时候执行什么方法,而不去管其内在的实现(就比如,我们常用的 protected void Button1_Click(object sender, EventArgs e)只管用,不用了解它是如何工作的)

这样一来,似乎一切就很明白了,他们最主要的区别除了文章开始时提到的一些之外,就是触发事件人的不同有了分工。希望可以给像我一样,分不清两者关系的人,一些帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: