一章1.5-1.8介紹的是com、動(dòng)態(tài)類型及.NET平臺(tái)一些說明,每個(gè)心中都有自己的標(biāo)準(zhǔn),聽一家之言,叫人不爽,相信自己有自己的標(biāo)準(zhǔn)和自己的編程理念就OK了,也不想碼那么多說明性的文字,直接跳過吧,當(dāng)然自己還是看過了。進(jìn)入正題,這篇來說一下委托(在深入理解C#的同時(shí),我也在學(xué)C++,委托確實(shí)和函數(shù)指針有相似的地方,大家也可以去了解下。)
委托的四個(gè)基本構(gòu)成:
聲明委托使用delegate關(guān)鍵字
1 public delegate void Drive(string name);
如上,聲明了一個(gè)委托類型Drive,由System.MulticastDelegate派生,而System.MulticastDelegate又是繼承于System.Delegate,該類型有自己的方法和屬性。與該類型匹配的方法的簽名必需使用一個(gè)string類型作為參數(shù)和返回一個(gè)void類型(即不返回),可以是靜態(tài)方法或者一個(gè)實(shí)例方法。
1 public class Car 2 { 3 //實(shí)例方法 4 public void Drive(string name) 5 { 6 Console.WriteLine(name + "正在開車!!!"); 7 } 8 9 //靜態(tài)方法10 public static void StaticDrive(string name)11 {12 Console.WriteLine(name + "正在開車!!!");13 }14 }如上,Car類中的Drive方法是一個(gè)實(shí)例方法,使用該方法前要有一個(gè)Car類型的實(shí)例,StaticDrive是一個(gè)靜態(tài)方法,使用類作用域便可以調(diào)用,且上述兩個(gè)方法的簽名均滿足上述委托對于方法簽名的要求。
接下來要?jiǎng)?chuàng)建一個(gè)Drive類型的委托實(shí)例,并且去調(diào)用。
1 class PRogram 2 { 3 static void Main(string[] args) 4 { 5 6 //聲明兩個(gè)委托實(shí)例 7 Drive drive0, drive1; 8 Car car = new Car(); 9 10 //對委托實(shí)例進(jìn)行賦值,一個(gè)使用靜態(tài)方法,一個(gè)使用實(shí)例方法11 drive0 = new Drive(Car.StaticDrive);12 drive1 = new Drive(car.Drive);13 14 //調(diào)用委托實(shí)例方法15 16 //使用委托實(shí)例中的Invoke方法進(jìn)行調(diào)用17 drive0.Invoke("Leo");18 //使用簡寫方法19 drive1("DuDu");20 21 Console.ReadKey();22 23 }24 }
上術(shù)只是對一個(gè)簡單操作的調(diào)用,委托更多的情況使用于多個(gè)操作聯(lián)合使用。可以使用Delegate.Combine和Delegate.Remove對操作的增減,一般使用簡寫方式+=和-=。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 //聲明兩個(gè)委托實(shí)例 7 Drive drive0, drive1; 8 Car car = new Car(); 9 10 //對委托實(shí)例進(jìn)行賦值,一個(gè)使用靜態(tài)方法,一個(gè)使用實(shí)例方法11 drive0 = new Drive(Car.StaticDrive);12 drive1 = new Drive(car.Drive);13 14 //調(diào)用委托實(shí)例方法15 16 //使用委托實(shí)例中的Invoke方法進(jìn)行調(diào)用17 drive0.Invoke("Leo");18 //使用簡寫方法19 drive1("DuDu");20 21 22 drive0 += drive1;23 drive0.Invoke("Leo");24 25 Console.ReadKey();26 27 }28 }運(yùn)行結(jié)果如下:

使用+=或者-=操作能更加方便,且利于理解。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注