亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

委托與事件

2019-11-14 16:42:45
字體:
來源:轉載
供稿:網友

1.什么是委托.

    MSDN上解釋..

    1). 委托是一種定義方法簽名的類型。 當實例化委托時,您可以將其實例與任何具有兼容簽名的方法相關聯。 與委托的簽名(由返回類型和參數組成)匹配的任何可訪問類或結構中的任何方法都可以分配給該委托.  方法可以是靜態方法,也可以是實例方法。 這樣就可以通過變成方式來更改方法調用,還可以向現有類中插入新代碼。只要知道委托的簽名,就可以分配您自己的方法。

    2). 您可以通過委托實例調用方法。事件處理程序就是通過委托調用的方法。

    3). 委托用于將方法做為參數傳遞給其他方法。

    4). 您可以創建一個自定義方法,當發生特定事件時某個類(例如 Windows控件) 就可以調用您的方法。

    委托的特點:

    1). 委托類似于C++函數指針.但他們是類型安全的。

    2). 委托允許將方法作為參數進行傳遞。

    3). 委托可用于定義回調方法。

    4). 委托可以鏈接在一起; 例如,可以對一個事件調用多個方法。

    5). 方法不必與委托簽名簽名安全匹配.

 

    總結了下,主要分為兩類:

     1). 委托可以做為方法的類型。方法可以賦值給委托的實例,且可以用“+=”賦值多個,也可以用"-="移除.

     2). 可以做為回調函數。

     

      因為我們主要講委托和事件,所以主要講類1

 

       1.委托

        //Create a delegate        public delegate void Del(string message);        //Create a method for a delegate.        public static void delegateMethod1(string message)        {            System.Console.WriteLine("I am     delegateMethod1:"+message);        }        static void Main(string[] args)
{
//Instantiate the delegate. Del handler = delegateMethod1; //call the delegate. handler("Hello World");

               如上圖, 創建一個委托和一個簽名相同的方法,將方法賦值給委托的實例,傳參調用委托和調用方法一樣.

               

     

       //Create a method for a delegate.        public static void delegateMethod2(string message)        {            System.Console.WriteLine("I am delegateMethod2:"+message);        }        static void Main(string[] args)        {            //Instantiate the delegate.            Del handler = delegateMethod1;            //call the delegate.              handler("Hello World");            Console.WriteLine();            //add second delegate            handler += delegateMethod2;            //call the delegate.              handler("Bye World");            Console.ReadLine();        }  

                 將另一個方法用“+=”符號,鏈接到委托實例上,當調用該委托實例時就依次調用這兩個方法.

 

                 

 

                同理可以用“-=”符號,移除委托中的方法.

            //Instantiate the delegate.            Del handler = delegateMethod1;            //call the delegate.              handler("Hello World");            Console.WriteLine();            //add second delegate            handler += delegateMethod2;            //call the delegate.              handler("Bye World");            Console.WriteLine();            //move method            handler -= delegateMethod1;
handler(
"Hello world"); Console.ReadLine();

                     移除一個方法后的執行結果

                      

                    上述可以通過加減賦值的叫多播委托,也是委托的一個作用

 

       2. 事件

MSDN上事件解釋: 類或對象可以通過事件向其他類或對象通知發生的相關事情。 發送(或引發)事件的類稱為“發行者”,接收(或處理)事件的類稱為“訂戶”。

通過解釋知道事件的主要作用是通知其他對象或類發生了事情

winform程序和web程序主要通過訂閱控件引發事件

事件的定義:

//Create a eventpublic event Del eventDel;

看看事件的定義是不是和委托有點像,很像直接實例化的委托,只不過前面多了一個event關鍵字.

事件的作用是通知其他類發生了事情,那么怎么樣通知呢?

1). 事件的通知

下面看個例程:

 class MainNotify    {        //定義一個委托        public delegate void NotifyDelegate();        //定義一個事件        public event NotifyDelegate notifyevent;                //方法        public void Notify()        {            if (notifyevent != null)            {                notifyevent();            }        }    }class PRogram    {       //Receive Notify Method        public static void NotifyPocess()        {            System.Console.WriteLine("Receive Notify!");        }
static void Main(string[] args) { //實例化類型 MainNotify mainnotify = new MainNotify(); //事件綁定方法 mainnotify.notifyevent += NotifyPocess; //執行方法 mainnotify.Notify();
        }

}

1.在MainNotify類中定義了一個事件,定義一個方法,方法執行時觸發事件

2.實例化這個類,將事件用"+="綁定這個接收方法,被綁定的方法叫訂閱這個事件,如果取消訂閱,事件觸發時就不會執行這個方法.

執行結果

  

 

看看事件的使用和委托是不是類似,事件說白了就是實例化的委托.

2). 事件也可以多播

        //Receive Notify Method        public static void NotifyPocess()        {            System.Console.WriteLine("Receive Notify!");        }        //Receive notify Method        public static void notifyProcess1()        {            System.Console.WriteLine("Receive Notify second!");        }        //實例化類型        MainNotify mainnotify = new MainNotify();        //事件綁定方法        mainnotify.notifyevent += NotifyPocess;        mainnotify.notifyevent += notifyProcess1;        //執行方法        mainnotify.Notify();

執行結果

 

如果方法不是靜態方法,需要用委托實例化方法

  //Receive Notify Method        public void NotifyPocess()        {            System.Console.WriteLine("Receive Notify!");        }        //Receive notify Method        public void NotifyProcess1()        {            System.Console.WriteLine("Receive Notify second!");        }        //實例化類型        MainNotify mainnotify = new MainNotify();        //事件綁定方法        mainnotify.notifyevent += new MainNotify.NotifyDelegate(NotifyPocess);        mainnotify.notifyevent += new MainNotify.NotifyDelegate(NotifyProcess1);        //執行方法        mainnotify.Notify();

 

winform控件事件程序

在窗體上添加一個按鈕,雙擊進入方法,添加事件處理程序,點擊按鈕,事件處理程序觸發.

下面演示怎么通過按鈕事件觸發程序

1.添加方法

 private void button1_Click(object sender, EventArgs e)        {            System.Console.WriteLine("Receive Button Event!");                  }

2.按鈕自帶委托和事件

 // 摘要:    //     表示將處理不包含事件數據的事件的方法。    //    // 參數:    //   sender:    //     事件源。    //    //   e:    //     不包含任何事件數據的 System.EventArgs。    [Serializable]    [ComVisible(true)]    public delegate void EventHandler(object sender, EventArgs e);    public event EventHandler Click;

3. 方法注冊事件

this.button1.Click += new System.EventHandler(this.button1_Click);

4.點擊按鈕事件觸發通知方法

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性xxxxx极品| 91午夜在线播放| 日韩视频免费看| 久久天天躁狠狠躁夜夜躁| 欧美午夜精品在线| 久久久久久国产精品三级玉女聊斋| 欧美成人剧情片在线观看| 国产91精品高潮白浆喷水| 亚洲欧洲一区二区三区久久| 超碰97人人做人人爱少妇| 亚洲一区二区三区在线视频| 国产亚洲a∨片在线观看| 国产精品美女久久久久久免费| 精品免费在线视频| xvideos成人免费中文版| 欧美高清性猛交| 成人xxxx视频| 久久色在线播放| 欧美洲成人男女午夜视频| 曰本色欧美视频在线| 国产一区二区在线免费| 全亚洲最色的网站在线观看| 国产精品久久久av| 久久97久久97精品免视看| 欧美一区第一页| 都市激情亚洲色图| 日韩在线www| 日本人成精品视频在线| 国产亚洲欧美日韩一区二区| 日韩电影在线观看中文字幕| 亚洲国产美女精品久久久久∴| 麻豆国产精品va在线观看不卡| 91精品国产色综合久久不卡98| 欧美大人香蕉在线| 国产欧美一区二区三区四区| 欧美日本国产在线| 久久久久久国产精品| 久久久久成人精品| 亚洲高清久久久久久| 亚洲色图日韩av| 日韩在线视频播放| 亚洲精品乱码久久久久久金桔影视| 亚洲国产欧美一区二区丝袜黑人| 色妞在线综合亚洲欧美| 国产视频999| 日韩在线视频网站| 久久伊人精品天天| 91亚洲国产精品| 精品国产一区av| 精品爽片免费看久久| 日韩欧美中文免费| 国产精品一区久久| 日韩av免费在线看| 国产精品第2页| 这里只有精品在线观看| 国产精品亚发布| 青青青国产精品一区二区| 色综合久久精品亚洲国产| 国产日韩av在线播放| 91精品国产自产在线观看永久| 欧美大片免费观看| 日韩中文字幕在线观看| 海角国产乱辈乱精品视频| 久久在线观看视频| 97久久超碰福利国产精品…| 国产一区二区久久精品| 在线看日韩av| 成人xxxx视频| 欧美精品日韩三级| 成人激情免费在线| www.日韩欧美| 91国偷自产一区二区三区的观看方式| 国产在线精品成人一区二区三区| 日韩欧美亚洲范冰冰与中字| 日韩欧美国产中文字幕| 亚洲香蕉成视频在线观看| 97视频在线观看视频免费视频| 欧美午夜激情小视频| 最新国产成人av网站网址麻豆| 国产精品久久久久久久久久小说| 欧洲亚洲女同hd| 国产精品一区专区欧美日韩| 欧美精品一区二区免费| 亚洲成人1234| 亚洲综合大片69999| 亚洲午夜久久久影院| 欧美成人小视频| 日韩人体视频一二区| 亚洲国产小视频在线观看| 欧美成人免费网| 成人激情春色网| 91视频免费在线| 色哟哟亚洲精品一区二区| 91av视频导航| 欧美精品一区二区三区国产精品| 久久这里有精品| 久久久av免费| 国产亚洲欧洲高清一区| 久久国产精彩视频| 亚洲最大福利视频网| 亚洲最新在线视频| 国内精久久久久久久久久人| 国产精品美乳一区二区免费| 亚洲国产精品久久久久秋霞蜜臀| 2021国产精品视频| 欧美视频13p| 国产精品一区二区av影院萌芽| 日本亚洲欧美成人| 国产精品久久视频| 亚洲欧洲日本专区| 国产精品视频一| 91精品综合久久久久久五月天| www.欧美精品一二三区| 欧美中文字幕视频在线观看| 国产成人综合精品| 国产在线一区二区三区| 98精品国产高清在线xxxx天堂| 日韩最新免费不卡| 成人黄色免费看| 成人亚洲欧美一区二区三区| 久久久免费观看视频| 激情懂色av一区av二区av| 日韩中文字幕精品视频| 国产视频亚洲视频| 国产精品日日做人人爱| 91在线观看免费高清| 视频直播国产精品| 欧美日韩国产一中文字不卡| 成人国产亚洲精品a区天堂华泰| 国产美女精品视频免费观看| 国产精品第三页| 亚洲男人的天堂网站| 国产成人综合一区二区三区| 中文字幕亚洲一区二区三区五十路| 中文字幕精品在线| 亚洲激情电影中文字幕| 久久成人综合视频| 九九久久国产精品| 欧美激情乱人伦| 国产精品久久久久久久久久久久| 2018国产精品视频| 国产精品人人做人人爽| 久久天天躁狠狠躁夜夜爽蜜月| 久久久久久国产精品久久| 伊人久久久久久久久久久久久| 欧美激情精品久久久久久久变态| 亚洲第一区第一页| 欧美一二三视频| 亚洲人成网7777777国产| 日本精品一区二区三区在线| 成人免费网视频| 国产日韩中文在线| 亚洲欧美日韩天堂| 久久久国产精品视频| 久久亚洲精品一区| 久久久亚洲国产| 国产精品偷伦一区二区| 曰本色欧美视频在线| 欧美超级免费视 在线| 久久久久久久激情视频| 欧美丰满少妇xxxxx| xxxxxxxxx欧美| 久久99国产精品自在自在app| 精品久久久久久中文字幕一区奶水|