zoukankan      html  css  js  c++  java
  • C#事件机制(记住流程)

    转自:http://jimmyloveforever.blog.163.com/blog/static/119775247200951303935836/

     
    1,C#事件机制是基于委托实现的,因此要首先定义一个委托EventHandler
     
                           public delegate void EventHandler(object from , myEventArgs e) 

      System.EventArgs是包含事件数据的类的基类,在代码中可直接使用EventArgs类。
      myEventArgs类派生于EventArgs类,实现自定义事件数据的功能。这里from表示发生事件的对象。 
    2,定义事件格式为:
     
               event 事件的委托名 事件名 

    如事件TextOut定义: 
         public event EventHandler TextOut; 
    3,事件的激活一般写成: 
            if (TextOut != null) 
                       TextOut(this,new EventArgs()); 
     检查TextOut事件有没有被订阅,如不为null,则表示有用户订阅。订阅事件的是 
    TestApp类,首先实例化EventSource,然后订阅事件: 
    evsrc.TextOut += new  EventSource.EventHandler(CatchEvent); 
    也可以取消订阅: 
    evsrc.TextOut -= new  EventSource.EventHandler(CatchEvent); 

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    // 定义事件包含数据 
    public class MyEventArgs : EventArgs
    {
        private string StrText;
        public MyEventArgs(string StrText)
        {
            this.StrText = StrText;
        }
        public string GetStrText
        {
            get
            {
                return StrText;
            }
        }
    }
    // 发布事件的类 
    class EventSource
    {
        MyEventArgs EvArgs = new MyEventArgs("触发事件");
        // 定义委托 
        public delegate void EventHandler(object sender, MyEventArgs e);
        // 定义事件 
        public event EventHandler TextOut;
        // 激活事件的方法 
        public void TriggerEvent()
        {
            if (TextOut == null)
                TextOut(this, EvArgs);
        }
    } 
    // 订阅事件的类 
    class TestApp
    {
        public static void Main()
        {
            EventSource evsrc = new EventSource();
            // 订阅事件 
            evsrc.TextOut += new EventSource.EventHandler(CatchEvent);
            // 触发事件 
            evsrc.TriggerEvent();
            Console.WriteLine("------");
            // 取消订阅事件 
            evsrc.TextOut -= new EventSource.EventHandler(CatchEvent);
            // 触发事件 
            evsrc.TriggerEvent();
            Console.WriteLine("------");  // 事件订阅已取消,什么也不执行 
            TestApp theApp = new TestApp();
            evsrc.TextOut += new EventSource.EventHandler(theApp.InstanceCatch);
            evsrc.TriggerEvent();
            Console.WriteLine("------");
        }
        // 处理事件的静态方法 
        public static void CatchEvent(object from, MyEventArgs e)
        {
            Console.WriteLine("CatchEvent:{0}", e.GetStrText);
        }
        // 处理事件的方法 
        public void InstanceCatch(object from, MyEventArgs e)
        {
            Console.WriteLine("InstanceCatch:{0},e.GetStrText");
        }
    }
  • 相关阅读:
    深入理解is_callable和method_exists
    php数据加密及数据存储和传输
    yii2深入理解之内核解析
    细说 unicode 、utf-8 、utf-16、ascii 、gbk 、gb2312
    RESTful API架构和oauth2.0认证机制(概念版)
    深入理解yii2之RBAC(模块化系统)
    yii rbac
    Yii2 设计模式
    深入理解PHP数组函数和预定义接口
    PHP 代码规范、流程规范、git规范
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/2920687.html
Copyright © 2011-2022 走看看