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

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

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

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

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

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

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

      好,既然我們已經(jīng)定義了這個規(guī)矩,下面我們就定義具體的方法了。
      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。我們看到,這里定義的兩個方法的返回值和參數(shù)跟我們前面定義的“委托”是一致的。(北大青鳥學(xué)校,北大青鳥課程)

      接下來,我們來看事件。
      public event SaySomething come;

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

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

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

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

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

      最后運行一下

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

      北大青鳥網(wǎng)上報名
      北大青鳥招生簡章
      主站蜘蛛池模板: 亚洲国产一区明星换脸| 久久毛片免费看一区二区三区| 波多野结衣精品一区二区三区| 日韩精品无码一区二区视频 | 国产A∨国片精品一区二区| 无码日韩精品一区二区免费暖暖 | 国产另类TS人妖一区二区 | 中文字幕在线精品视频入口一区| 国产aⅴ精品一区二区三区久久| 亚洲综合一区二区精品导航| 国产精品成人一区二区| 免费一区二区无码视频在线播放| 亚洲AV一区二区三区四区 | V一区无码内射国产| 波多野结衣一区在线观看| 天天躁日日躁狠狠躁一区| 手机福利视频一区二区| 成人精品一区二区三区校园激情 | 国产伦精品一区二区三区免费迷| 国产精品久久无码一区二区三区网| 伊人色综合网一区二区三区 | 一区二区三区四区精品视频| 亚欧色一区W666天堂| 亚欧免费视频一区二区三区| 自拍日韩亚洲一区在线| 成人区人妻精品一区二区三区 | 亚洲A∨无码一区二区三区| 精品一区二区三区无码免费视频| 亚洲一区二区三区免费观看| 亚洲av成人一区二区三区观看在线| 麻豆AV天堂一区二区香蕉| 美女AV一区二区三区| 中文字幕一区二区三区四区| 亚洲AV无码一区东京热| 亚洲AV无码一区二区三区久久精品 | 国产精品一区在线观看你懂的| 视频一区精品自拍| 亚洲国产视频一区| 国产suv精品一区二区6| 久久精品亚洲一区二区| 国产免费一区二区三区|