最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中自定義事件和委托實(shí)例

 更新時間:2015年01月05日 12:00:06   投稿:junjie  
這篇文章主要介紹了C#中自定義事件和委托實(shí)例的,本文先是闡述了事件的原理,然后講解了事件和委托的步驟,并給出了實(shí)例代碼,需要的朋友可以參考下

在windows 編程中用到最多的就是控件的事件了,微軟給我們很好的方式,把注意力放到事件執(zhí)行方法的設(shè)計(jì)和編碼上,但是但我們真正弄懂了事件的真正出發(fā)執(zhí)行原理的話,對我們的編程的提高真是非常榜的,例如在windows編程中 如果我單擊了一個button按鈕觸發(fā)了button 的click事件  Button1_Click(){} ,但是有時候我們編程的時候,不但想要觸發(fā)button 的單擊事件,我還想要把其他的時間也要調(diào)用下來順序執(zhí)行,要實(shí)現(xiàn)這種方式,除了在方法最后對其他方法的調(diào)用,還可以利用將其他需要順序執(zhí)行的方法封裝到button的click 事件的委托對象中,這樣就能夠順序執(zhí)行毀掉方法列表中的程序了,而這種方式的實(shí)現(xiàn)是以清楚事件觸發(fā)和委托的調(diào)用為前提的。

事件是類和對象向外界發(fā)出的消息,事件的執(zhí)行是通過事件委托的方式,調(diào)用我們所準(zhǔn)備好的處理方法,而是先消息的響應(yīng)的。要響應(yīng)某些事件并針對某些事件執(zhí)行我們意定的方法,需要做到以下幾步:


1、聲明事件委托。

2、聲明事件。

3、添加事件的觸發(fā)方法。

4、添加事件的處理程序(響應(yīng)事件的方法)。

5、將指定的事件處理程序邦定到要處理的事件上(訂閱事件)。

6、用戶信息操作,并觸發(fā)事件(調(diào)用事件的觸發(fā)方法)。

7、通過事件委托的回調(diào),執(zhí)行我們需要的事件處理程序。

下面我們舉一個簡單的自定義事件處理程序的例子(控制臺程序)

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

   namespace 事件
   {
    //發(fā)布事件的類
    public class TestEventSource
    {
        //定義事件參數(shù)類
        public class TestEventArgs : EventArgs
        {
            public readonly char KeyToRaiseEvent;
            public TestEventArgs(char keyToRaiseEvent)
            {
                KeyToRaiseEvent = keyToRaiseEvent;
            }
        }

        //定義delegate
        public delegate void TestEventHandler(object sender, TestEventArgs e);
        //用event 關(guān)鍵字聲明事件對象
        public event TestEventHandler TestEvent;

        //事件觸發(fā)方法
        protected virtual void OnTestEvent(TestEventArgs e)
        {
            if (TestEvent != null)
                TestEvent(this, e);
        }

        //引發(fā)事件
        public void RaiseEvent(char keyToRaiseEvent)
        {
            TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
            OnTestEvent(e);
        }

    }
    //監(jiān)聽事件的類
    public class TestEventListener
    {
        //定義處理事件的方法,他與聲明事件的delegate具有相同的參數(shù)和返回值類型
        public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
        {
            Console.WriteLine("發(fā)送者:{0},所按得健為:{1}", sender, e.KeyToRaiseEvent);
        }

        //訂閱事件
        public void Subscribe(TestEventSource evenSource)
        {
            evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
        }
        //取消訂閱事件
        public void UnSubscribe(TestEventSource evenSource)
        {
            evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
        }
    }

    //測試類
    public class Test
    {
        public static void Main()
        {
            //創(chuàng)建事件源對象
            TestEventSource es = new TestEventSource();
            //創(chuàng)建監(jiān)聽對象
            TestEventListener el = new TestEventListener();
            //訂閱事件
            Console.WriteLine("訂閱事件\n");
            el.Subscribe(es);
            //引發(fā)事件
            Console.WriteLine("輸入一個字符,再按enter鍵");
            string s = Console.ReadLine();
            es.RaiseEvent(s.ToCharArray()[0]);
            //取消訂閱事件
            Console.WriteLine("\n取消訂閱事件\n");
            el.UnSubscribe(es);

            //引發(fā)事件
            Console.WriteLine("輸入一個字符,再按enter健");
            s = Console.ReadLine();
            es.RaiseEvent(s.ToCharArray()[0]);

 

        }
    }

}

程序執(zhí)行結(jié)果

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

訂閱事件

輸入一個字符,再按enter鍵
aaaa
發(fā)送者:事件.TestEventSource,所按得健為:a

取消訂閱事件

輸入一個字符,再按enter健


TestEventSource類。他就相當(dāng)于windows控件類一樣,是事件的源,里面包含有事件的聲明,以及存儲調(diào)用參數(shù)的事件參數(shù)類,以及事件的觸發(fā)方法。      

TestEventListener類。他提供了事件處理程序,并實(shí)現(xiàn)了事件處理程序和事件對象的邦定,當(dāng)然時間處理程序可以放在別處, 跟邦定程序(訂閱事件)放在一起便于理解和調(diào)用

Test 類,實(shí)例化自定義事件的事件源對象,并調(diào)用 TestEventListener類中的Subscribe(es);方法進(jìn)行事件對象和事件處理程序的邦定(訂閱事件),調(diào)用 TestEventSource類中的RaiseEvent(char keyToRaiseEvent)引發(fā)對象,并有對象所指定的委托回調(diào)處理事件。完成整個自定義事件。

其中   RaiseEvent(char keyToRaiseEvent)      就相當(dāng)于main()一樣是自定義事件的執(zhí)行入口,       從這個法開始---〉調(diào)用事件委托----〉查找訂閱事件程序找到事件所封裝的方法集----〉由委托回調(diào)事件處理程序并傳遞參數(shù)---〉執(zhí)行事件處理程序。

相關(guān)文章

  • 詳解C#中三個關(guān)鍵字params,Ref,out

    詳解C#中三個關(guān)鍵字params,Ref,out

    本文主要討論params關(guān)鍵字,ref關(guān)鍵字,out關(guān)鍵字。非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-05-05
  • C# 無邊框窗體邊框陰影效果的簡單實(shí)現(xiàn)

    C# 無邊框窗體邊框陰影效果的簡單實(shí)現(xiàn)

    這篇文章介紹了C# 無邊框窗體邊框陰影效果的簡單實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-10-10
  • c# 識別圖片格式的方法

    c# 識別圖片格式的方法

    這篇文章主要介紹了c# 識別圖片格式的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#中String和StringBuilder的簡介與區(qū)別

    C#中String和StringBuilder的簡介與區(qū)別

    今天小編就為大家分享一篇關(guān)于C#中String和StringBuilder的簡介與區(qū)別,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#實(shí)現(xiàn)文件與Base64的相互轉(zhuǎn)換

    C#實(shí)現(xiàn)文件與Base64的相互轉(zhuǎn)換

    本文主要介紹了C#實(shí)現(xiàn)文件與Base64的相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C#筆試題之同線程Lock語句遞歸不會死鎖

    C#筆試題之同線程Lock語句遞歸不會死鎖

    這篇文章主要介紹了C$ 筆試題之同線程Lock語句遞歸不會死鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 詳解c# 多態(tài)

    詳解c# 多態(tài)

    這篇文章主要介紹了c# 多態(tài)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#使用前序遍歷、中序遍歷和后序遍歷打印二叉樹的方法

    C#使用前序遍歷、中序遍歷和后序遍歷打印二叉樹的方法

    這篇文章主要介紹了C#使用前序遍歷、中序遍歷和后序遍歷打印二叉樹的方法,涉及C#遍歷二叉樹的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • 使用C#寫了一個可以推算火車票身份證號碼的小程序

    使用C#寫了一個可以推算火車票身份證號碼的小程序

    這篇文章主要介紹了使用C#寫了一個可以推算火車票身份證號碼的小程序 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 綁定winform中DataGrid

    綁定winform中DataGrid

    綁定winform中DataGrid,需要的朋友可以參考一下
    2013-02-02

最新評論

剑阁县| 翼城县| 阿合奇县| 中牟县| 聂荣县| 吉隆县| 海南省| 屯昌县| 泰安市| 绥芬河市| 申扎县| 浠水县| 大城县| 志丹县| 辛集市| 巩义市| 天长市| 黔西| 嘉鱼县| 化德县| 馆陶县| 庆云县| 嘉峪关市| 鲁甸县| 滨海县| 仪陇县| 汝州市| 达孜县| 手机| 昌宁县| 临颍县| 青州市| 铜梁县| 鲜城| 云林县| 兴城市| 富锦市| 岳池县| 云安县| 安宁市| 德钦县|