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

C# 委托与事件

看了很多事例和解释 还不是太理解委托和事件的概念,就知道用控件时的自动生成的事件,想明白他的原理~求大神解释一下,最好简单易懂的 举下例子也可以。谢了 --------------------编程问答-------------------- 深入理解c#委托和事件 --------------------编程问答--------------------
引用 1 楼 www52rsNet 的回复:
深入理解c#委托和事件

看过了 --------------------编程问答-------------------- 我也是,看完资料就明白,过后就又晕了 --------------------编程问答-------------------- 求高手解答呀~~ --------------------编程问答-------------------- 好比现实生活中的我交给你一件事去办这个例子。
首先我需要定义出来这个事到底是干嘛?也就是事件的描述,这个描述在代码中是通过委托方式表现的。(比如我要你去叫某个人)
delegate void CallSthBodyDelegate(string personName);
上面这个就是这个事件的契约,也是我和你沟通的方式,你在做相关事情的时候必须要符合这个契约。

然后才有了基于这个描述的事件
class Me
{
public event CallSthBodyDelegate MyRequest;
  void CallZhangsan()
   { 
    var del=MyRequest;
   if(del!=null)
   {
     del("zhangsan");
    }
   }
}
接下来我需要把这件事交给你去办吧?
MyRequest+=YOUDO //事件的挂接方式
YOUDO当然去接受这个事件的相关信息吧,相关信息也就是我们前面定义出来的委托的格式
YOUDO:
class You
{
  public You()
  {
    Me m=new Me();
    m.MyRequest+=CallSthBodyDelegate(CallPerson);
  }
  

  void CallPerson(string personName)
  {
    Console.Write(string.Format("{0} was called",personName));
  }
} --------------------编程问答-------------------- 你自己写一个dll就懂了,我写个需求给你
-----------------------------------------------

编写一个类库,编译成dll,供其他开发者引用

dll里,有一个方法GetData,返回值是DataTable
dll里还有timer,每隔一段时间,就调用一下GetData方法,比如每隔几秒就通过GetData获取出一个dataTable

通过事件,能让引用dll的开发人员使用获取出的DataTable

实现的效果就是:当dll内部获取出数据后,把数据抛到引用dll的层中进行使用
----------------------------------------------------------------------------

把这个类库做好,你就懂了。我当初就是开发这个程序搞懂的委托和事件

当你开发程序引用外部dll的时候,dll里什么时候获取到数据是未知,只能通过抛出事件来实现

这就是事件和方法的最主要区别,方法是自己在代码里调用,代码运行到就执行,而事件啥时候运行,对于开发人员来说是不确定的

就像你编写了一个按钮点击事件,写了相应的代码

但这些代码什么时候执行,你确定不了,啥时候点按钮啥时候就执行 --------------------编程问答--------------------
引用 6 楼 bluceyoung 的回复:
你自己写一个dll就懂了,我写个需求给你
-----------------------------------------------

编写一个类库,编译成dll,供其他开发者引用

dll里,有一个方法GetData,返回值是DataTable
dll里还有timer,每隔一段时间,就调用一下GetData方法,比如每隔几秒就通过GetData获取出一个……

我懂了这个逻辑,但是不太理解那语法丝的,能指点下吗 --------------------编程问答-------------------- 你都理解了逻辑,语法还有什么可说的……

委托就是平时写的方法,加个delegate

事件跟委托的关系就仿佛属性和字段的关系 --------------------编程问答-------------------- 委托是对方法的引用,可以引用多个方法,他其实是一个类,包含了线程间调用接口
事件是封装为属性的委托 --------------------编程问答-------------------- 看着看着 似乎明白 又有点不明白,晕啊~ --------------------编程问答-------------------- 我想说的是 事件的定义完了 我们怎么设置他的触发条件呢 求个例子 --------------------编程问答-------------------- 你去超市购物,就是事件。我托你给我带包烟,就是委托!
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,