久草最新视频-久草最新网址-久国产-久国产视频-天天插夜夜操-天天插一插

北大青鳥課程之:C#委托與事件(一)

一、在控制臺(tái)下使用委托和事件

通州北大青鳥學(xué)校學(xué)術(shù)部老師講解:我們都知道,C#中有“接口”這個(gè)概念,所謂的“接口”就是定義一套標(biāo)準(zhǔn),然后由實(shí)現(xiàn)類來(lái)具體實(shí)現(xiàn)其中的方法,所以說(shuō)“接口,是一組類的抽象”。同樣道理,我們可以將“委托”理解為“方法的抽象”,也就是說(shuō)定義一個(gè)方法的模板,至于這個(gè)方法具體是怎么樣的,就由方法自己去實(shí)現(xiàn)。(北大青鳥課程

北大青鳥學(xué)校學(xué)術(shù)部丁老師講解:接口的最大好處就是可以實(shí)現(xiàn)多態(tài),同理,“委托”是可以實(shí)現(xiàn)方法的多態(tài),當(dāng)我們想調(diào)用某個(gè)具體方法的時(shí)候,我們不直接調(diào)用這個(gè)方法,而是去調(diào)用這個(gè)委托。當(dāng)然,我們必須在具體方法和委托之間建立某種關(guān)聯(lián)。

北大青鳥學(xué)校學(xué)術(shù)部丁老師舉例:

首先,我們定義一個(gè)委托:
public delegate void SaySomething(string name);

這跟抽象方法的語(yǔ)法格式很相似,只是多了一個(gè)關(guān)鍵字delegate。既然是對(duì)方法的一種抽象,那么我們最關(guān)注的當(dāng)然就是方法的返回值以及方法的參 數(shù)了。所以上面紅色的部分就是我們定義出來(lái)的一個(gè)規(guī)矩,如果某個(gè)方法想委托我去做事,那么請(qǐng)你遵循我的規(guī)矩,就是返回值為void,參數(shù)為一個(gè)字符串。我 們這個(gè)委托的含義是,當(dāng)某個(gè)人來(lái)了,就向他說(shuō)點(diǎn)東西。(北大青鳥學(xué)校,北大青鳥課程)

好,既然我們已經(jīng)定義了這個(gè)規(guī)矩,下面我們就定義具體的方法了。
public void SayHello(string name)
{
    Console.WriteLine("Hello," + name + "!");
}

public void SayNiceToMeetYou(string name)
{
    Console.WriteLine("Nice to meet you," + name + "!");
}
我們這里一共定義了兩個(gè)方法,一個(gè)是向某人說(shuō)Hello,另一個(gè)是向某人說(shuō)Nice to meet you。我們看到,這里定義的兩個(gè)方法的返回值和參數(shù)跟我們前面定義的“委托”是一致的。(北大青鳥學(xué)校,北大青鳥課程)

接下來(lái),我們來(lái)看事件。
public event SaySomething come;

我們定義了一個(gè)事件,這個(gè)事件是“有人來(lái)了”,注意定義的時(shí)候我們使用event關(guān)鍵字,除此之外,我們還加上了前面定義的“委托”的名字。這個(gè)意 思是說(shuō),我這個(gè)事件只會(huì)跟“SaySomething”打交道,并且,當(dāng)我這個(gè)事件發(fā)生的時(shí)候,我會(huì)通知關(guān)注我的這些“委托”(再由這些“委托”去調(diào)用具 體的方法)。

我們來(lái)定義一個(gè)測(cè)試方法:
public void test() {
    SaySomething sayhello = new SaySomething(SayHello);
    SaySomething saynice = new SaySomething(SayNiceToMeetYou);
    come += sayhello;
    come += saynice;
    come("張三");
}

方法體中的前面兩行是用來(lái)實(shí)例化委托,注意我們用到了new關(guān)鍵字,就好像實(shí)例化一個(gè)類一樣,然后傳入一個(gè)參數(shù),但這個(gè)參數(shù)不是string類型、也不是int類型,而是一個(gè)方法名。(北大青鳥學(xué)校,北大青鳥課程

再下面兩行就是將委托加到事件上,意思是說(shuō),如果你這個(gè)事件發(fā)生了,就告訴我一聲�?梢酝ㄟ^(guò)“+=”來(lái)將n個(gè)委托實(shí)例加到某個(gè)事件上,一旦這個(gè)事件發(fā)生,所有的這些委托實(shí)例都會(huì)得到通知。

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

最后運(yùn)行一下

我們回過(guò)頭來(lái)再看一下“事件”的定義:
public event SaySomething come;
這里已經(jīng)指出了“委托”的名字,所以,我們可以直接將方法加到事件上,而省略“委托”的實(shí)例化過(guò)程,因此上面的test()方法可以簡(jiǎn)單寫為:
public void test() {
    come += SayHello;
    come += SayNiceToMeetYou;
    come("張三");
}
北大青鳥學(xué)校學(xué)術(shù)部提供北大青鳥課程(未完待續(xù))

北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡(jiǎn)章
主站蜘蛛池模板: 亚洲h视频| 久久综合精品国产一区二区三区无 | 成人精品视频一区二区三区 | 欧美激情精品久久久久久久 | 亚洲视频1区 | 久久亚洲精品成人 | 动漫av网站免费观看 | 中文字幕成人在线观看 | 欧美人在线 | 2022国产麻豆剧传媒剧情 | 杰罗德游戏在线观看完整版免费 | 亚洲视频区 | 成品人app软件大全下载免费 | 青青青久97在线观看香蕉 | 99热这里只有精品第一页 | 一级毛片免费视频观看 | 天天色天天综合网 | 精品国产欧美另类一区 | 国产一级毛片高清视频在线 | 欧美日韩第一区 | 亚洲网站在线免费观看 | 五月激情五月婷婷 | 久久精品国产精品青草不卡 | 成人黄色免费 | 久草国产在线播放 | 国产一在线精品一区在线观看 | 动漫免费看的网站 | 久久激情五月丁香伊人 | 亚洲精品短视频 | www青青草| 亚洲黄色片网站 | 亚洲精品tv久久久久久久久 | 国产一区二区三区免费播放 | 在线免费一区 | 免费三级毛片 | 2023国产在线观看 | 精品视频免费看 | 免费观看黄视频 | 天天色综合6 | 亚洲不卡一区二区三区在线 | 香蕉久草视频 |