C#委託與事件講解(一)

 從序言中,大家應該對委託和事件的重要性有點了解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委託吧,從字面上理解,只要是中國人應該都知道這個意思,除非委託2箇中文字不認識,舉個例子,小明委託小張去買車票。
 
    但是在我們的程序世界裏,也是這麼的簡單嗎?當然,什麼是OO,OO就是現實世界的抽象,所有現實世界的事物,在OO裏都能得到很好的詮釋,不好意思,扯遠了......

    那我們就單刀直入吧,如果同學們不嫌煩的話,可以看一下,網上中文,英文的那個GreetingPeople例子。

      首先是C#語法

    

public delegate void BugTicketEventHandler();

 

       delegate 是關鍵詞,【注:EventHandler是一個聲明委託的微軟C#的命名標準,我的習慣是標準就要第一時間說,也就這個命名習慣要第一時間養成】

      完了,這就是委託,就這麼簡單,看看和我們一般的方法有什麼區別呢?

 

public void BuyTicket()
{
    方法體
}

        區別知道了吧,在現實生活中,委託只是個命令,做事情是別人,而在程序世界裏委託只是存儲了各個方法的地址,而他自己也是什麼也不做的。

      那我們就把剛纔那個,小明委託小張去買車票的現實生活場景,怎麼在程序世界裏體現呢?

 代碼

//小張類
    public class MrZhang
    {
        
//其實買車票的悲情人物是小張
        public static void BuyTicket()
        {
            Console.WriteLine("NND,每次都讓我去買票,雞人呀!");
        }
    }

    
//小明類
    class MrMing
    {
        
//聲明一個委託,其實就是個“命令”
        public delegate void BugTicketEventHandler();

        
public static void Main(string[] args)
        {
            
//這裏就是具體闡述這個命令是幹什麼的,本例是MrZhang.BuyTicket“小張買車票”
            BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);

            
//這時候委託被附上了具體的方法
            myDelegate();
            Console.ReadKey();
        }
    } 
 

 

  BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); 

這是委託的聲明方法, BugTicketEventHandler(委託的方法);委託的方法必須要加上,因爲委託的構造函數是不爲空的。

注:委託的參數和返回類型,都要和你要具體委託的方法要一致,例:

  public delegate void BugTicketEventHandler();


  public static void BuyTicket()
  {
   Console.WriteLine("NND,每次都讓我去買票,雞人呀!");
  }

      同學們,看到這裏可以先消化消化,休息一下,我們簡單的講一下委託鏈的概念:

   其實委託鏈也是相當的簡單,在現實生活中,小明叫小張買完車票之後,可能接着又讓他帶張電影票,

   而我們程序世界裏的表述爲:

 //小張類
    public class MrZhang
    {
        
//其實買車票的悲情人物是小張
        public static void BuyTicket()
        {
            Console.WriteLine(
"NND,每次都讓我去買票,雞人呀!");
        }

        
public static void BuyMovieTicket()
        {
            Console.WriteLine(
"我去,自己泡妞,還要讓我帶電影票!");
        }
    }

    
//小明類
    class MrMing
    {
        
//聲明一個委託,其實就是個“命令”
        public delegate void BugTicketEventHandler();

        
public static void Main(string[] args)
        {
            
//這裏就是具體闡述這個命令是幹什麼的,本例是MrZhang.BuyTicket“小張買車票”
            BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);

            myDelegate 
+= MrZhang.BuyMovieTicket;
            
//這時候委託被附上了具體的方法
            myDelegate();
            Console.ReadKey();
        }
    } 

      好了,關於大白話的委託就介紹到這裏了,是不是並沒有大家想的這麼可怕呢,在下一回我們就接着大白話的EVENT的講解。
  

       其實,我們只是在程序中加了 myDelegate += MrZhang.BuyMovieTicket;

      這時這個委託就相當於要做2件事情,先是買車票,再是買電影票拉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章