public class MyText
{
        public delegate void ChangedEventHandler(object sender,EventArgs e);
        public event ChangedEventHandler Changed;        public virtual void OnChanged(EventArgs e)
        { 
            if(Changed !=null)
            {
                Changed(this,e);
            }
        }
}class Program
    {
        static void Main(string[] args)
        {
            MyText txt = new MyText();
            txt.Changed+=new MyText.ChangedEventHandler(txt_Changed);
            ...
        }        private static  void txt_Changed(object sender,EventArgs e)
        {
            Console.WriteLine("Text has been changed:{0}" ,((MyText)sender).Text);
        }
    }
理解事件委托与事件的关系,在以上代码中委托是否可以这样理解:委托是为事件服务的。代码txt.Changed+=new MyText.ChangedEventHandler(txt_Changed);作用就是通过委托ChangedEventHandler给事件Changed指定响应改事件的方法(txt_Changed)。也就是将事件处理方法(txt_Changed)添加到事件Changed调用列表中。
不知我的理解是否正确。各位发表一下意见!

解决方案 »

  1.   

    http://topic.csdn.net/t/20030513/09/1775097.html
    参考这个帖子
      

  2.   

    事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发(触发)事件的对象叫做事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。   
      在事件通讯中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET框架定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。   
      委托是一个可以对方法进行引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调  
      

  3.   

    白文例子:
    比如你要租一个房屋,这是一个事件,那么委托就是房屋租赁中介,当你把租房子的消息告知中介后,中介就会产生出一套符合你要求的房屋租赁方案来。再由中介执行这套方案,你便租得了这个房屋,即事件被处理了。C#中使用事件需要的步骤:
    1.创建一个委托
    2.将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也就有相应的一个委托,在编写关联事件处理程序--也就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有相同的签名)
    3.编写事件处理程序
    4.利用编写的事件处理程序生成一个委托实例
    5.把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件
      

  4.   

       委托是一种强类型,事件也是一种委托。在委托前加一个Event就变成了事件,同时这个事件只能在定义这个事件的内部调用。有了委托我们就可以对动作进行传递。这个动作的签名必须和添加这个动作的委托的签名相同。