今天对于自定义事件与方法的区别有了一点感性的认识
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)只管用,不用了解它是如何工作的)
这样一来,似乎一切就很明白了,他们最主要的区别除了文章开始时提到的一些之外,就是触发事件人的不同有了分工。希望可以给像我一样,分不清两者关系的人,一些帮助。
由于做的项目一直比较小,这些知识点也就一直没有怎么用,所以一直是抹零两可的。
以前网上查到的资料都是过于理论化,比如说:事件可以把方法做为参数传递,事件只声明了要调用方法(具体调用哪个不确定)等等
--------------------------------------------------------------------------------------------------------------------------
今天在网上找资料复习一下类的继承,看的例子中使用了自定义事件,而且是一个很简单的自定义事件。
整理以后的代码如下:
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)只管用,不用了解它是如何工作的)
这样一来,似乎一切就很明白了,他们最主要的区别除了文章开始时提到的一些之外,就是触发事件人的不同有了分工。希望可以给像我一样,分不清两者关系的人,一些帮助。
相关文章推荐
- iOS学习之OC语————对于自定义构造方法的认识与理解
- onclick事件和JQuery中的click方法的本质区别
- 一个直观感性的方法认识linux的系统驱动架构
- 对于oracle sql左连接的一点认识
- 对于jQuery中$.ajax方法的新认识
- staic 方法在继承时重写的一点认识
- 对于REST中无状态(stateless)的一点认识
- 今天开始学Java 对于二叉树的认识
- Android:从拨打电话认识安卓点击事件的四种书写方法
- ASP.NET 用户控件自定义属性、方法、事件
- 对于HOOK函数的一点认识
- jQuery实现获取绑定自定义事件元素的方法
- FCKeditor键盘事件两种方法(自定义键盘事件,自带键盘事件)asp.net
- Javascript关于绑定事件方法attachEvent和addEventListener区别与兼容写法
- js原生创建模拟事件和自定义事件的方法
- JQ中bind(),live(),delegate()事件方法的区别
- 全部对于Unity3D中 NGUI 触发事件的监听方法
- 关于自定义协议的一点处理方法
- IOS之构造方法与自定义构造方法的区别与实现
- 对于数组方法的区别总结