从刚开始学.net没多久,就开始关注自定义事件、委托等知识点。
由于做的项目一直比较小,这些知识点也就一直没有怎么用,所以一直是抹零两可的。
以前网上查到的资料都是过于理论化,比如说:事件可以把方法做为参数传递,事件只声明了要调用方法(具体调用哪个不确定)等等
--------------------------------------------------------------------------------------------------------------------------
今天在网上找资料复习一下类的继承,看的例子中使用了自定义事件,而且是一个很简单的自定义事件。
整理以后的代码如下:
{
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)只管用,不用了解它是如何工作的)
这样一来,似乎一切就很明白了,他们最主要的区别除了文章开始时提到的一些之外,就是触发事件人的不同有了分工。希望可以给像我一样,分不清两者关系的人,一些帮助。