C#委託與事件講解

來源:互聯網
上載者:User
從序言中,大家應該對委託和事件的重要性有點瞭解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委託吧,從字面上理解,只要是中國人應該都知道這個意思,除非委託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);

這是委託的聲明方法, BugTicketEventHandler(委託的方法);委託的方法必須要加上,因為委託的建構函式是不為空白的。

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

public delegate void BugTicketEventHandler();


public static void BuyTicket()
{
Console.WriteLine("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;

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.