事件委托 EventHandler

事件就是当对象或类状态发生改变时,对象或类发出的信息或通知。发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托来为触发时将调用的方法提供类型安全的封装


事件的声明

1.声明一个委托
public delegate void EventHandler(object sender, System.EventArgs e);

2.声明一个事件
public event EventHandler Changed;

3.引发一个事件
public OnChanged(EnventArgs e)
{
 if ( Changed != null)
 {
  Changed(this,e);
 }
}

4.定义事件处理程序
public MyText_OnChanged(Object sender,EventArgs e)
{
 ...
}

5.订阅事件(将事件处理程序添加到事件的调用列表中)

myText.Changed += EventHandler(MyText_OnChanged);

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace 事件的委托  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            MyClass myClass = new MyClass();  
  
            // 6,将事件处理程序添加到事件的调用列表中(即事件布线)  
            myClass.Changed += new MyClass.ChangedEventHandler(myText_Changed);           
              
            string str = "";  
            while (str != "quit")  
            {  
                Console.WriteLine("please enter a string:");  
                str = Console.ReadLine();  
                myClass.Text = str;  
            }  
        }  
  
        // 对Change事件处理的程序  
        private static void myText_Changed(object sender, EventArgs e)  
        {  
            Console.WriteLine("text has been changed  :{0}\n", ((MyClass)sender).Text);  
        }          
        }  
    public class MyClass   
    {  
        //1,声明空字符传myStr;  
        private string myStr = "";  
        //2,定义事件的委托  
        public delegate void ChangedEventHandler(object sender, EventArgs e);  
        //3,定义一个事件  
        public event ChangedEventHandler Changed;  
        //4,触发事件  
        protected virtual void OnChanged(EventArgs e)  
        {  
            if (this.Changed != null)  
                this.Changed(this, e);  
        }  
        // 5,Text属性  
        public string Text  
        {  
            get { return this.myStr; }  
            set  
            {  
                this.myStr = value;  
                // 文本改变时触发Change事件  
                this.OnChanged(new EventArgs());  
            }  
        }  
    }  
}  

 

posted @ 2016-01-24 10:37  雨花梦  阅读(763)  评论(0编辑  收藏  举报