现在的位置: 首页 > 综合 > 正文

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

2012年12月01日 ⁄ 综合 ⁄ 共 1483字 ⁄ 字号 评论关闭

从刚开始学.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)只管用,不用了解它是如何工作的)

 

这样一来,似乎一切就很明白了,他们最主要的区别除了文章开始时提到的一些之外,就是触发事件人的不同有了分工。希望可以给像我一样,分不清两者关系的人,一些帮助。

 

 

抱歉!评论已关闭.