首頁 > 後端開發 > C#.Net教程 > C#委託與事件解說

C#委託與事件解說

高洛峰
發布: 2016-12-14 11:17:50
原創
1333 人瀏覽過

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

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

     首先是C#語法

public delegate void BugTicketEventHandler();
登入後複製

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

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

public void BuyTicket()
{   
 方法体
 }
登入後複製

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

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

代码 

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//小张类
    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); myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); 

這是委託的聲明方法, BugTicketEventHandler(

註:委託的參數和回傳類型,都要與你要具體委託的方法要一致,例如:

  public delegate void BugTicketEventHandler();


Line( "NND,每次都讓我去買票,雞人呀!");
  }

  

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

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

   而我們程序世界裡的表述為:

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->//小张类
    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();
        }
    }
登入後複製

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板