c#事件處理中事件信息EventArgs的使用和類型內部事件委托delegate的調用


事件信息EventArgs:http://msdn.microsoft.com/zh-cn/library/system.eventargs.aspx

1事件信息可以用於傳遞處理附帶的事件數值,可以自定義事件信息類型來繼承

2事件委托可以聲明在事件的類型中,並可以通過【類型名.事件委托名】來調用該委托類型創建事件的處理代理

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 事件2
{
    class Program
    {
        static void Main(string[] args)
        {
            myEventer mEr = new myEventer();
            EventWatcher EWr = new EventWatcher(mEr);
            mEr.OnTrigger("浣熊市行動", 1);
        }
    }

    class myEventArgs:EventArgs//聲明事件信息類型,並繼承於EventArgs
    {
        public myEventArgs(string strinfo,int intinfo)
        {
            this.strinfo = strinfo;
            this.intinfo = intinfo;
        }
        private string strinfo;
        private int intinfo;
        public string StrInfo
        {
            get { return strinfo; }
        }
        public int IntInfo
        {
            get { return intinfo; }
        }
    }

    class myEventer//聲明用於聲明事件的類型
    {
        public delegate void myEventerHandler(object sender,myEventArgs mEa);//在類型內部聲明事件代理
        public event myEventerHandler trigger;//通過事件代理聲明事件event
        public void OnTrigger(string strinfo,int intinfo)//事件觸發的方法,這里要傳遞2個參數
        {
            myEventArgs mEa = new myEventArgs(strinfo,intinfo);//以參數初始化一個新的事件信息對象
            trigger(this, mEa);
        }
    }

    class EventWatcher//事件觀察和事件處理方法綁定類
    {
        private myEventer mEr;
        public EventWatcher(myEventer mer)//通過構造函數傳遞一個事件觸發類對象,用於綁定事件處理方法
        {
            this.mEr = mer;
            mEr.trigger += new myEventer.myEventerHandler(processEvent);//雖然事件委托位於事件類型中,但仍可以通過[類型.事件委托]來訪問創建
        }
        private void processEvent(object sender,myEventArgs mEa)//和事件委托相同簽名的事件處理方法
        {
            Console.WriteLine("已獲取事件信息,事件編號:{0},事件名稱:{1}",mEa.IntInfo,mEa.StrInfo);
        }
    }
}

可以看到,該事件委托並非全局聲明,但依舊可以通過

類型對象.事件+=new 類型名稱.事件委托(事件處理方法名);

來進行事件的綁定~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM