程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#委托與事件的簡單使用

C#委托與事件的簡單使用

編輯:C#基礎知識

前言:上一篇博文從原理和定義的角度介紹了C#的委托和事件。本文通過一個簡單的小故事,來說明C#委托與事件的使用方法及其方便之處。

在閱讀本文之前,需要你對委托和事件的基本概念有所了解。如果你是初次接觸C#的委托與事件,請先閱讀:C#委托與事件初探

 

好了,故事開始了~

 

一.小考拉從前的生活

  從前有一只小考拉,她的生活中只有三樣東西:水,米飯和肉。她渴了就去拿水喝,餓了就去拿米飯和肉吃。而且,米飯和肉一定要一起吃(換作你也不會單吃一種吧^_^),於是代碼是這樣的

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
 namespace KoalaOldLife
 {
     class Koala
     {
         public void Water() { Console.WriteLine("Find Water"); }
         public void Rice() { Console.WriteLine("Find Rice"); }
         public void Meat() { Console.WriteLine("Find Meat"); }
 
         public void Need()
         {
             Water();
             Rice();
             Meat();
         }
     }
 
     class Program
     {
         static void Main(string[] args)
         {
             Koala koala = new Koala();
             koala.Need();
             Console.ReadKey();
         }
     }
 }

  我們的關注點在Need函數(下同),因為Need函數表明了小考拉有需求的時候要怎樣做。小考拉先拿了水喝,然後拿了米飯和肉吃。

 

二.小考拉現在的生活

  終於有一天,小考拉覺得整天自己找東西吃太累了,於是她回到家,委托爸爸媽媽幫忙。

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
 namespace KoalaLife
 {
     class Water
     {
         public void showWater() { Console.WriteLine("Here's the Water!"); }
     }
 
     class Rice
     {
         public void showRice() { Console.WriteLine("Here's the rice"); }
     }
 
     class Meat
     {
         public void showMeat() { Console.WriteLine("Here's the meat"); }
     }
 
     delegate void Dad(); //定義委托
     delegate void Mom();
 
     class Koala
     {
         public event Dad thirsty; //定義事件
         public event Mom hungry;
 
         public void Need()
         {
             thirsty(); //調用事件
             hungry();
         }
     }
 
     class Program
     {
         static void Main(string[] args)
         {
             Koala koala = new Koala();
             koala.thirsty += (new Water()).showWater; //綁定事件對應的方法
             koala.hungry += (new Rice()).showRice;
             koala.hungry += (new Meat()).showMeat;
 
             koala.Need();
             Console.ReadKey();
         }
     }
 }

  從Need函數可以看出,小考拉說渴的時候爸爸會過來,說餓的時候媽媽會過來。但是最開始他們並不知道要拿什麼東西給小考拉。所以在Main函數中,小考拉要提前告訴爸爸:我說渴的時候給我拿水;提前告訴媽媽:我說餓的時候給我拿米飯和肉。

  這樣一來,小考拉就不用自己找東西了,只需要提前告訴爸爸媽媽一次渴和餓的時候需要什麼,然後直接喊“我渴了”,“我餓了”,爸爸媽媽就會來送東西給小考拉吃。小考拉就能有更多時間懶懶的睡覺啦zZ~

 

三.總結

  以上故事中,最開始只有對象(小考拉)和方法(水、米飯、肉)兩層。後來在對象和方法這兩層之間,加入了委托(爸爸媽媽),變為了三層,從而簡化思路。很明顯,這是因為,委托和事件幫助我們隱去了底層的一些細節,將細節封裝起來,從而簡化編程。

  我想,這又是面向對象思想的一個體現吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved