從序言中,大家應該對委托和事件的重要性有點瞭解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委托吧,從字面上理解,只要是中國人應該都知道這個意思,除非委托2個中文字不認識,舉個例子,小明委托小張去買車票。 但是在我們的程式世界里,也是這麼的 ...
從序言中,大家應該對委托和事件的重要性有點瞭解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委托吧,從字面上理解,只要是中國人應該都知道這個意思,除非委托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();
}
}
其實,我們只是在程式中加了 myDelegate += MrZhang.BuyMovieTicket;
這時這個委托就相當於要做2件事情,先是買車票,再是買電影票拉!
好了,關於大白話的委托就介紹到這裡了,是不是並沒有大家想的這麼可怕呢,在下一回我們就接著大白話的EVENT的講解。