国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C#事件訪問(wèn)器詳解

2020-01-24 02:54:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們可以通過(guò)為事件定義事件訪問(wèn)器,來(lái)控制事件運(yùn)算符+=、-=運(yùn)算符的行為

•有兩個(gè)訪問(wèn)器:add和remove
•聲明事件的訪問(wèn)器看上去和聲明一個(gè)屬性差不多

下面示例演示了具有訪問(wèn)器的聲明.兩個(gè)訪問(wèn)器都有叫做value的隱式值參數(shù),它接受實(shí)例或靜態(tài)方法的引用

復(fù)制代碼 代碼如下:

public event EventHandler Elapsed
{
    add
    {
        //... 執(zhí)行+=運(yùn)算符的代碼
    }

     remove
     {
        //... 執(zhí)行-=運(yùn)算符的代碼
     }

}


聲明了事件訪問(wèn)器后,事件不包含任何內(nèi)嵌委托對(duì)象.我們必須實(shí)現(xiàn)自己的機(jī)制來(lái)存儲(chǔ)和移除事件的方法

事件訪問(wèn)器表現(xiàn)為void方法,也就是不能使用會(huì)返回值的return語(yǔ)句

完整示例:

復(fù)制代碼 代碼如下:

//聲明一個(gè)delegate
    delegate void EventHandler();

    class MyClass
    {
        //聲明一個(gè)成員變量來(lái)保存事件句柄(事件被激發(fā)時(shí)被調(diào)用的delegate)
        private EventHandler m_Handler = null;

        //激發(fā)事件
        public void FireAEvent()
        {
            if (m_Handler != null)
            {
                m_Handler();
            }
        }

        //聲明事件
        public event EventHandler AEvent
        {
            //添加訪問(wèn)器
            add
            {
                //注意,訪問(wèn)器中實(shí)際包含了一個(gè)名為value的隱含參數(shù)
                //該參數(shù)的值即為客戶(hù)程序調(diào)用+=時(shí)傳遞過(guò)來(lái)的delegate
                Console.WriteLine("AEvent add被調(diào)用,value的HashCode為:" + value.GetHashCode());
                if (value != null)
                {
                    //設(shè)置m_Handler域保存新的handler
                    m_Handler = value;
                }
            }

            //刪除訪問(wèn)器
            remove
            {
                Console.WriteLine("AEvent remove被調(diào)用,value的HashCode為:" + value.GetHashCode());
                if (value == m_Handler)
                {
                    //設(shè)置m_Handler為null,該事件將不再被激發(fā)
                    m_Handler = null;
                }
            }

        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass obj = new MyClass();
            //創(chuàng)建委托
            EventHandler MyHandler = new EventHandler(MyEventHandler);
            MyHandler += MyEventHandle2;
            //將委托注冊(cè)到事件
            obj.AEvent += MyHandler;
            //激發(fā)事件
            obj.FireAEvent();
            //將委托從事件中撤銷(xiāo)
            obj.AEvent -= MyHandler;
            //再次激發(fā)事件
            obj.FireAEvent();


            Console.ReadKey();
        }

        //事件處理程序
        static void MyEventHandler()
        {
            Console.WriteLine("This is a Event!");
        }

        //事件處理程序
        static void MyEventHandle2()
        {
            Console.WriteLine("This is a Event2!");
        }
    }

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安顺市| 陵水| 洪湖市| 抚顺县| 普定县| 百色市| 特克斯县| 长乐市| 茶陵县| 临夏县| 城口县| 正宁县| 清新县| 广元市| 冷水江市| 贵港市| 体育| 邢台县| 杭锦后旗| 衡阳县| 巴彦淖尔市| 清徐县| 顺义区| 会泽县| 鄢陵县| 玉田县| 鄂州市| 康乐县| 清水河县| 萨迦县| 南安市| 湘西| 嘉禾县| 庆阳市| 鹰潭市| 鹤峰县| 和顺县| 门源| 资兴市| 深水埗区| 米林县|