当前位置:编程学习 > C#/ASP.NET >>

求解 c#中委托和事件解释

 菜鸟一枚
 求助各位 谁给给解释下c#中的委托和事件  刚接触  有点迷糊 --------------------编程问答-------------------- 就是将调用关系反转。

一般的函数,都是调用者调用被调用者,而委托允许让调用者定义自己的代码,并且传入,使得被调用者,也就是函数定义者可以反过来调用由调用者定义的代码。 --------------------编程问答-------------------- refer : http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html --------------------编程问答-------------------- 事件是委托的一种形式,不可以直接调用。
如果你写js会用到“回调函数”,也就是把一个函数当参数传递,等对方处理完毕会调用这个回调函数来返回结果。委托和这个是一回事 --------------------编程问答-------------------- 现在我们要计算两个数的和,减法,除法,乘法,以前是这样写的:

static void Main()
{
  //以前我们要这样调:
  //计算1和2的加减乘除
  //Add(1,2);
  //Sub(1,2);
  //Mul(1,2);
  //Dev(1,2);
  //上面写有一个不好的一点就是代码多,第二每一次添加一个方法都要动态的添加调用的方法,如果有一天想计算两个数的别的算法的时候,就得又要写调用的方法,于是就有了委托,意思就是只要是计算两个数的,我不管你是怎么计算了,只要是能计算两个数就可以了。
 public delegate int Calc(int i,int j);  //申明一个委托,和方法的签名一致
 
 //使用委托指向一个方法
 Calc calc=Add;  //指向加法,以后要计算两个数的运算直接修改委托指向的这个方法名就即可这样省了很多代码,而且把方法作为参数了。拓展型也很强
 calc(1,2);

 

}
//加
static int Add(int i,int j)
{
   return i+j;
}
//减
static int Sub(int i,int j)
{
   return i-j;
}
//乘
static int Mul(int i,int j)
{
   return i*j;
}
//除
static int Dev(int i,int j)
{
   if(j!=0)
  {
   return i/j;
 }
else
{
  return -1;
}
}
--------------------编程问答-------------------- 事件:
事件就是一个机制,就是一些列连锁反应,
举一个例子吧,我们烧水,説大概到95度的时候就开始沸腾了,换句话话,是不是水到95度的时候就触发了沸腾这件事。这个很荣誉理解吧。好把,我们就用程序解释吧。委托是一个类,事件是一个类型,而事件的实例要委托类型才能定义(很重要的一句),更多的时候,委托和事件是差不多的,只是事件有一个触发的机制(水95度沸腾),还有就是注册事件。

现在我们弄一个用户按钮控件,功能是点击三下触发事件处理方法,

先声明一个委托类型的事件(初学者建议用系统的委托)


public static event EventHandler ThreeClick;//申明一个事件对象

//触发机制
               int i=1;
void Button1Click(object sender, EventArgs e)
{
if(i!=3)
{
i++;
}
else
{
if(ThreeClick!=null)  //判断事件是否已经注册
{
ThreeClick(sender,e); //和委托一样调用
}
i=1;
}
}

//这样我们就可以在主函数中写

void MainFormLoad(object sender, System.EventArgs e)
{
userControl11.ThreeClick+= new EventHandler(userControl11_ThreeClick);//注册事件和委托不太一样,事件和多播委托是差不多的,不过,多播委托一般最终执行的是最后一个,而事件是一个个地执行。
}
    //这里是触发后腰执行的方法
void userControl11_ThreeClick(object sender, EventArgs e)
{
MessageBox.Show("您点击了三次");
}

--------------------编程问答-------------------- 不大懂的可以留言给我,并留下你的qq。到时候我加你。.net中委托,事件,反射,多态,抽象类,接口,虚方法,抽象成员,这些都是初学者很容易晕的地方,如果不懂的话我语音形象教你。 --------------------编程问答-------------------- 我委托下面的是人给你解释

如果他解释不了或者你还是不理解,请发给站内短信事件通知我,告诉我你还是不明白 --------------------编程问答-------------------- 我解释不了 --------------------编程问答-------------------- 形象的解释委托就是“自己的事不想做委托给别人去做” --------------------编程问答-------------------- 其实就是给一个方法增加它发生时还会发生的方法指针 --------------------编程问答-------------------- 了解它们首先需要问为什么要有它们?
楼主可以去查一下观测者设计模式,我们为什么需要观测者设计模式呢?C#中是如何现实观察者模式的呢?
Exploring the Observer Design Pattern
http://msdn.microsoft.com/en-us/library/ee817669.aspx --------------------编程问答--------------------
引用 9 楼 zhurcn 的回复:
形象的解释委托就是“自己的事不想做委托给别人去做”
别人做完了,再告诉你结果---就叫回调 --------------------编程问答-------------------- 事件就是"人走路回家",你调用这个事件会告诉他这个人是谁,就变成了“王小二走路回家”。一个广义的事情,你用的时候变成了比较狭义的了。
委托就是"去买个酱油",你调用委托的时候就是"你叫小花去买个酱油",至于怎么买的你不需要知道,只要知道过会他会把酱油带来给你就行了。当然你还需要付钱(内存,cpu) --------------------编程问答-------------------- 去看下一般时间是怎么实现的就知道了 --------------------编程问答--------------------
引用 9 楼 zhurcn 的回复:
形象的解释委托就是“自己的事不想做委托给别人去做”
--------------------编程问答-------------------- 谢谢 我是新手  谢谢大家这么耐心的教我 --------------------编程问答-------------------- 新手表示很受益 谢谢
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,