中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解C#事件機制

發布時間:2020-07-12 10:24:19 來源:網絡 閱讀:997 作者:riran 欄目:編程語言

        C#中的委托事件機制是這種語言的一大亮點,以一種更加安全和高效的方式可以實現類似C語言中的函數指針,Qt中的信號槽機制和委托事件機制在實際運用中頗為相似,但是,C#使用上更加方便。下面,我先貼個圖來展示一個事件機制的原理:

詳解C#事件機制

        上述Publisher類的作用就是定義委托、定義事件以及定義觸發事件的方法;

        Subscriber類的作用注冊事件,并且定義具體的事件處理方法。(好像Subscriber類不需要注冊事件,注冊事件是在運行的模塊進行)

        這種思想本人以為就是:還沒想好怎么做就先搭個框架(寫個函數聲明),以后那些客戶誰想具體怎么做,以后他自己想辦法去,我們只把函數簽名聲明好就夠了,免得客戶對我們細致的定義不滿意。


        【上圖我感覺解釋事件還是有點兒不好理解,我認為理解事件其實就是通過注冊事件將事件和事件處理函數聯系起來,當事件發生時,我們將我們需要的事件處理函數注冊到該事件中,使得我們滿意的處理過程發生。】

舉個例子(例子是借鑒別人的博文 《C# 事件機制》)

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace Delegate_And_Event
{
    public delegate void SalaryComputeEventHander(object sender, MyEventArgs e);
    public class Employee
    {
        public event SalaryComputeEventHander SalaryCompute;
        public virtual void OnSalaryCompute(MyEventArgs e) //觸發事件的函數
        {
            if(SalaryCompute != null)
            {
                SalaryCompute(this,e);
            }
        }
    }
    public class MyEventArgs : EventArgs
    {
        public readonly double _salary;
        public MyEventArgs(double salary)
        {
            this._salary = salary;
        }
    }
    public class HumanResource
    {
        //具體的事件處理函數
        public void SalaryHandler(object sender, MyEventArgs e)
        {
            Console.Write("Salary is {0}",e._salary);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Employee ep = new Employee ();
            HumanResource hr = new HumanResource ();
            MyEventArgs e = new MyEventArgs (20000.5);
            ep.SalaryCompute += new SalaryComputeEventHander(hr.SalaryHandler);   //將具 體事件處理函數注冊到事件中
            while (true)
            {
                Thread.Sleep(1000);
                ep.OnSalaryCompute(e);                   
            }

        }        
    }
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤山市| 仁寿县| 营口市| 无为县| 宜黄县| 太原市| 高淳县| 天峻县| 竹山县| 天镇县| 剑河县| 桐庐县| 九台市| 会昌县| 大宁县| 古田县| 渭南市| 玛沁县| 宁河县| 正阳县| 四会市| 耒阳市| 上思县| 梁河县| 清徐县| 手游| 高碑店市| 拉萨市| 德钦县| 宜章县| 安吉县| 夏河县| 巫溪县| 浦城县| 孙吴县| 镇巴县| 嘉定区| 金沙县| 镇平县| 庆元县| 普定县|