C#中拜托和事宜的差別實例解析。本站提示廣大學習愛好者:(C#中拜托和事宜的差別實例解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中拜托和事宜的差別實例解析正文
本文實例剖析了C#中拜托和事宜的差別,分享給年夜家供年夜家參考之用。詳細以下:
年夜致來講,拜托是一個類,該類外部保護著一個字段,指向一個辦法。事宜可以被看做一個拜托類型的變量,經由過程事宜注冊、撤消多個拜托或辦法。本篇分離經由過程拜托和事宜履行多個辦法,從中領會二者的差別。
1、經由過程拜托履行辦法
class Program { static void Main(string[] args) { Example example = new Example(); example.Go(); Console.ReadKey(); } } public class Example { public delegate void DoSth(string str); internal void Go() { //聲明一個拜托變量,並把已知辦法作為其結構函數的參數 DoSth d = new DoSth(Print); string str = "Hello,World"; //經由過程拜托的靜態辦法Invoke觸發拜托 d.Invoke(str); } void Print(string str) { Console.WriteLine(str); } }
上述代碼完成:
① 在CLR運轉時,拜托DoSth現實上就一個類,該類有一個參數類型為辦法的結構函數,而且供給了一個Invoke實例辦法,用來觸發拜托的履行。
② 拜托DoSth界說了辦法的參數和前往類型
③ 經由過程拜托DoSth的結構函數,可以把相符界說的辦法賦值給拜托
④ 挪用拜托的實例辦法Invoke履行了辦法
但現實上讓拜托履行辦法還有別的一種方法,那就是:拜托變量(參數列表)
public class Example { public delegate void DoSth(object sender, EventArgs e); internal void Go() { //聲明一個拜托變量,並把已知辦法作為其結構函數的參數 DoSth d = new DoSth(Print); object sender = 10; EventArgs e = new EventArgs(); d(sender, e); } void Print(object sender, EventArgs e) { Console.WriteLine(sender); } }
上述代碼完成:
① 拜托DoSth的參數列表和辦法Print的參數列表照樣堅持分歧
② 拜托DoSth中的參數object sender平日用來表現舉措的提議者,EventArgs e用來表現舉措所帶的參數。
而現實上,拜托變量(參數列表),事宜就是采取這類情勢履行辦法的。
2、經由過程事宜履行辦法
public class Example { public delegate void DoSth(object sender, EventArgs e); public event DoSth myDoSth; internal void Go() { //聲明一個拜托變量,並把已知辦法作為其結構函數的參數 DoSth d = new DoSth(Print); object sender = 10; EventArgs e = new EventArgs(); myDoSth += new DoSth(d); myDoSth(sender, e); } void Print(object sender, EventArgs e) { Console.WriteLine(sender); } }
上述代碼完成:
① 聲清楚明了事宜myDoSth,事宜的類型是DoSth這個拜托
② 經由過程+=為事宜注冊拜托
③ 經由過程DoSth拜托的結構函數為事宜注冊拜托實例
④ 采取拜托變量(參數列表)這類情勢,讓事宜履行辦法
並且,經由過程+=還可認為事宜注冊多個拜托。
public class Example { public delegate void DoSth(object sender, EventArgs e); public event DoSth myDoSth; internal void Go() { //聲明一個拜托變量,並把已知辦法作為其結構函數的參數 DoSth d = new DoSth(Print); DoSth d1 = new DoSth(Say); object sender = 10; EventArgs e = new EventArgs(); //為事宜注冊多個拜托 myDoSth += new DoSth(d); myDoSth += new DoSth(d1); myDoSth(sender, e); } void Print(object sender, EventArgs e) { Console.WriteLine(sender); } void Say(object sender, EventArgs e) { Console.WriteLine(sender); } }
以上,經由過程+=為事宜注冊1個或多個拜托實例,現實上,還可認為事宜直接注冊辦法。
public class Example { public delegate void DoSth(object sender, EventArgs e); public event DoSth myDoSth; internal void Go() { object sender = 10; EventArgs e = new EventArgs(); //為事宜注冊多個拜托 myDoSth += Print; myDoSth += Say; myDoSth(sender, e); } void Print(object sender, EventArgs e) { Console.WriteLine(sender); } void Say(object sender, EventArgs e) { Console.WriteLine(sender); } }
3、經由過程EventHandler履行辦法
先來看EventHandler的源代碼。
public delegate void EventHandler(object sender, System.EventArgs e);
可見,EventHandler就是拜托。如今就應用EventHandler來履行多個辦法。
public class Example { public event EventHandler myEvent; internal void Go() { object sender = 10; EventArgs e = new EventArgs(); //為事宜注冊多個拜托 myEvent += Print; myEvent += Say; myEvent(sender, e); } void Print(object sender, EventArgs e) { Console.WriteLine(sender); } void Say(object sender, EventArgs e) { Console.WriteLine(sender); } }
總結:
① 拜托就是一個類,也能夠實例化,經由過程拜托的結構函數來把辦法賦值給拜托實例
② 觸發拜托有2種方法: 拜托實例.Invoke(參數列表),拜托實例(參數列表)
③ 事宜可以看做是一個拜托類型的變量
④ 經由過程+=為事宜注冊多個拜托實例或多個辦法
⑤ 經由過程-=為事宜刊出多個拜托實例或多個辦法
⑥ EventHandler就是一個拜托
信任本文所述對年夜家C#法式設計的進修有必定的自創價值。