a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C#事件訪問器詳解

2020-01-24 02:54:02
字體:
來源:轉載
供稿:網友

我們可以通過為事件定義事件訪問器,來控制事件運算符+=、-=運算符的行為

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

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

復制代碼 代碼如下:

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

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

}


聲明了事件訪問器后,事件不包含任何內嵌委托對象.我們必須實現自己的機制來存儲和移除事件的方法

事件訪問器表現為void方法,也就是不能使用會返回值的return語句

完整示例:

復制代碼 代碼如下:

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

    class MyClass
    {
        //聲明一個成員變量來保存事件句柄(事件被激發(fā)時被調用的delegate)
        private EventHandler m_Handler = null;

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

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

            //刪除訪問器
            remove
            {
                Console.WriteLine("AEvent remove被調用,value的HashCode為:" + value.GetHashCode());
                if (value == m_Handler)
                {
                    //設置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;
            //將委托注冊到事件
            obj.AEvent += MyHandler;
            //激發(fā)事件
            obj.FireAEvent();
            //將委托從事件中撤銷
            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ā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天堂视频中文字幕 | 亚洲免费视频大全 | 一级欧美| 婷婷亚洲综合 | 青草青草久热精品视频在线观看 | 欧美高清一区 | 一级免费黄视频 | 影音先锋男人网 | 精品影院 | 中文字幕日韩一区二区 | 久久美女| 亚洲黄色网址 | 日韩在线| 九九久久久 | 色婷婷成人网 | 日韩欧美中文字幕在线视频 | www.av在线| 免费的日本网站 | 毛片网络| 欧美精品一区二区视频 | 精品一区二区三区三区 | 中文字幕综合在线 | 国产一区二区三区久久 | 色婷婷亚洲 | 91中文字幕| 久久伊人成人 | 乱xxxxx普通话对白 | 久久久亚洲一区二区三区 | 国变精品美女久久久久av爽 | 国产精品一区二区在线免费观看 | 一区二区三区免费在线 | 美女国产网站 | 国产精品国产成人国产三级 | 亚洲欧洲中文日韩 | 色噜噜在线 | 91亚洲精| 日韩美香港a一级毛片免费 欧美一极视频 | 高潮一级片 | 亚洲乱码在线 | 成人看片在线观看 | 欧美亚洲高清 |