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

溫馨提示×

溫馨提示×

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

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

如何理解C#委托與事件

發布時間:2021-06-16 13:56:00 來源:億速云 閱讀:185 作者:chen 欄目:編程語言

本篇內容主要講解“如何理解C#委托與事件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解C#委托與事件”吧!

一、在控制臺下使用C#委托和事件

我們都知道,C#中有“接口”這個概念,所謂的“接口”就是定義一套標準,然后由實現類來具體實現其中的方法,所以說“接口,是一組類的抽象”。同樣道理,我們可以將“委托”理解為“方法的抽象”,也就是說定義一個方法的模板,至于這個方法具體是怎么樣的,就由方法自己去實現。

我們知道接口的***好處就是可以實現多態,同理,“委托”是可以實現方法的多態,當我們想調用某個具體方法的時候,我們不直接調用這個方法,而是去調用這個委托。當然,我們必須在具體方法和委托之間建立某種關聯。

下面我們來看例子。

首先,我們定義一個委托:

public delegate void SaySomething(string name);

這跟抽象方法的語法格式很相似,只是多了一個關鍵字delegate。既然是對方法的一種抽象,那么我們最關注的當然就是方法的返回值以及方法的參數了。所以上面紅色的部分就是我們定義出來的一個規矩,如果某個方法想委托我去做事,那么請你遵循我的規矩,就是返回值為void,參數為一個字符串。我們這個委托的含義是,當某個人來了,就向他說點東西。

好,既然我們已經定義了這個規矩,下面我們就定義具體的方法了。

public void SayHello(string name)  {      Console.WriteLine("Hello," + name + "!");  }    public void SayNiceToMeetYou(string name)  {      Console.WriteLine("Nice to meet you," + name + "!");  }

我們這里一共定義了兩個方法,一個是向某人說Hello,另一個是向某人說Nice to meet you。我們看到,這里定義的兩個方法的返回值和參數跟我們前面定義的“委托”是一致的。

接下來,我們來看事件。

public event SaySomething come;

我們定義了一個事件,這個事件是“有人來了”,注意定義的時候我們使用event關鍵字,除此之外,我們還加上了前面定義的“委托”的名字。這個意思是說,我這個事件只會跟“SaySomething”打交道,并且,當我這個事件發生的時候,我會通知關注我的這些“委托”(再由這些“委托”去調用具體的方法)。

我們來定義一個測試方法:

public void test() {       SaySomething sayhello = new SaySomething(SayHello);      SaySomething saynice = new SaySomething(SayNiceToMeetYou);      come += sayhello;      come += saynice;      come("張三");  }

方法體中的前面兩行是用來實例化委托,注意我們用到了new關鍵字,就好像實例化一個類一樣,然后傳入一個參數,但這個參數不是string類型、也不是int類型,而是一個方法名。

再下面兩行就是將委托加到事件上,意思是說,如果你這個事件發生了,就告訴我一聲。可以通過“+=”來將n個委托實例加到某個事件上,一旦這個事件發生,所有的這些委托實例都會得到通知。

***一行是觸發一個事件,注意我們是直接用一個事件名,然后跟一個參數,這又跟“委托”中定義的那個規矩一致(即,要有一個string類型的參數)。

***運行一下

static void Main(string[] args)  {      Program program = new Program();      program.test();      Console.Read();  }

如何理解C#委托與事件

我們回過頭來再看一下“事件”的定義:

public event SaySomething come;

這里已經指出了“委托”的名字,所以,我們可以直接將方法加到事件上,而省略“委托”的實例化過程,因此上面的test()方法可以簡單寫為:

public void test() {       come += SayHello;      come += SayNiceToMeetYou;      come("張三");  }

二、在窗體中使用C#委托和事件

上面的例子并不能體現委托和事件的優點,其實,委托和事件在C#中使用非常廣泛,例如,當我們點擊某個“按鈕”的時候,就會有一個“Click”事件觸發,而這個事件會通知“委托”,在C#窗體應用程序中,“委托”的名字比較規范,統一使用“EventHandler”,它的具體格式是“void EventHandler(object sender, EventArgs e);”。相信大家都寫過下面這樣子的HelloWorld程序:

如何理解C#委托與事件

當點擊按鈕的時候彈出一個對話框。我們怎樣實現的呢?你肯定會說,我們在設計窗口雙擊按鈕,就會自動為我們生成類似如下的方法:

private void button1_Click(object sender, EventArgs e)  {      MessageBox.Show("我被點擊了!!!");  }

其實,這里用到的就是事件和委托,這里的button1_Click就是符合EventHandler委托規矩的一個具體的方法,即返回值為void,參數分別是一個object和EventArgs。

我們可以在Form1.Designer.cs中看到如下代碼:

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

可以看到,這里有一個Click事件,然后將一個委托實例附加到這個事件上,跟我們前面講的控制臺應用程序中的用法是完全一樣的。那這個Click事件是怎么觸發的呢?對于這些系統類的事件,并不用我們管。

當然,我們也可以定義自己的事件和委托,例如我定義一個事件,這個事件就是輸出對象的名字。

如何理解C#委托與事件

我們這里定義了一個ShowName委托和一個btnclick事件。并且,在button1_Click()方法中觸發這個btnclick事件。***的結果是,當我們點擊按鈕的時候,首先彈出一個“我被點擊了!!!”的對話框,然后確定之后再彈出另一個顯示按鈕名稱的對話框:

如何理解C#委托與事件

到此,相信大家對“如何理解C#委托與事件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

独山县| 安丘市| 丹寨县| 台南市| 黎城县| 宁安市| 晋中市| 乌兰县| 湘阴县| 交口县| 桑日县| 西丰县| 惠来县| 昌江| 金华市| 苏尼特左旗| 涟水县| 乳源| 三河市| 安乡县| 凯里市| 酒泉市| 沧州市| 肥西县| 宜都市| 台山市| 温泉县| 镶黄旗| 屏东县| 贡山| 江安县| 龙门县| 宝丰县| 泰顺县| 法库县| 龙陵县| 青岛市| 历史| 峡江县| 宁蒗| 富裕县|