C#事件

C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:

public delegate void MyEventHandler (object sender, MyEventArgs e)

sender代表事件发送者,e是事件参数类

 

创建步骤

  (1)、定义delegate对象类型。
  (2)、定义事件参数类,从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
  (3)、定义“事件处理方法,它应当与delegate对象具有相同的参数和返回值类型”。//创建
  (4)、用event关键字定义事件对象,它同时也是一个delegate对象。
  (5)、用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。//订阅
  (6)、在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。
  (7)、在适当的地方调用事件触发方法触发事件。

 

事件例子1

//事件类 
public class EventSend {
            public delegate void EventHandler(object sender, EventArgs a);//第一步,创建委托
                                                                          //第二步省略
            public class HandleClass {
                public void HandleFunction(object sender, EventArgs a)   //第三步事件处理函数,参数必须一样,以供订阅
                {
                    Console.WriteLine("hello");
                }
            }
      public event EventHandler oneEvent;//第四步定义事件实体
            private HandleClass handleClass;//处理函数实例化
            public EventSend()//构造函数
            {
                handleClass = new HandleClass();
                this.oneEvent += new EventHandler(handleClass.HandleFunction);//第五步订阅,添加事件到事件队列
            }
            protected void GetEvent(EventArgs e)//第六步事件触发函数
            {
                if (oneEvent != null) {
                    oneEvent(this, e);
                }
            }
      public void CreateEvent()//第七步触发事件
            {
                EventArgs e = new EventArgs();
                if (Console.ReadLine() == "a")
                    this.GetEvent(e);
                else
                    Console.WriteLine("未触发事件");
            }
        }

事件例子2

//调用事件
 static void Main(string[] args) {
            Console.WriteLine("请输入小写字母a触发事件");
            for (;;)
            {
                EventSend event1 = new EventSend();
                event1.CreateEvent();
            }
        }

 

posted @ 2016-03-07 20:18  大尾巴贝贝  阅读(276)  评论(0编辑  收藏  举报