• 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");
        }
    }
  • 相关阅读:
    html Table实现表头固定
    Asp.net ORA-12154: TNS: 无法解析指定的连接标识符
    VS加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS
    Sqlserver 导出insert插入语句
    RRAS
    MVC实例应用模式
    MVC概述
    23种设计模式
    XXX系统质量属性
    大型网站架构读后感
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/2920687.html
Copyright © 2020-2023  润新知