程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 03.C#委托(二章1.1),

03.C#委托(二章1.1),

編輯:C#入門知識

03.C#委托(二章1.1),


  一章1.5-1.8介紹的是com、動態類型及.NET平台一些說明,每個心中都有自己的標准,聽一家之言,叫人不爽,相信自己有自己的標准和自己的編程理念就OK了,也不想碼那麼多說明性的文字,直接跳過吧,當然自己還是看過了。進入正題,這篇來說一下委托(在深入理解C#的同時,我也在學C++,委托確實和函數指針有相似的地方,大家也可以去了解下。)

  委托的四個基本構成:

  聲明委托使用delegate關鍵字

1 public delegate void Drive(string name);

  如上,聲明了一個委托類型Drive,由System.MulticastDelegate派生,而System.MulticastDelegate又是繼承於System.Delegate,該類型有自己的方法和屬性。與該類型匹配的方法的簽名必需使用一個string類型作為參數和返回一個void類型(即不返回),可以是靜態方法或者一個實例方法。

 1 public class Car
 2     {
 3         //實例方法
 4         public void Drive(string name)
 5         {
 6             Console.WriteLine(name + "正在開車!!!");
 7         }
 8 
 9         //靜態方法
10         public static void StaticDrive(string name)
11         {
12             Console.WriteLine(name + "正在開車!!!");
13         }
14     }

  如上,Car類中的Drive方法是一個實例方法,使用該方法前要有一個Car類型的實例,StaticDrive是一個靜態方法,使用類作用域便可以調用,且上述兩個方法的簽名均滿足上述委托對於方法簽名的要求。

  接下來要創建一個Drive類型的委托實例,並且去調用。

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5 
 6             //聲明兩個委托實例
 7             Drive drive0, drive1;
 8             Car car = new Car();
 9 
10             //對委托實例進行賦值,一個使用靜態方法,一個使用實例方法
11             drive0 = new Drive(Car.StaticDrive);
12             drive1 = new Drive(car.Drive);
13 
14             //調用委托實例方法
15 
16             //使用委托實例中的Invoke方法進行調用
17             drive0.Invoke("Leo");
18             //使用簡寫方法
19             drive1("DuDu");
20 
21             Console.ReadKey();
22 
23         }
24     }

  上術只是對一個簡單操作的調用,委托更多的情況使用於多個操作聯合使用。可以使用Delegate.Combine和Delegate.Remove對操作的增減,一般使用簡寫方式+=和-=。

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5 
 6             //聲明兩個委托實例
 7             Drive drive0, drive1;
 8             Car car = new Car();
 9 
10             //對委托實例進行賦值,一個使用靜態方法,一個使用實例方法
11             drive0 = new Drive(Car.StaticDrive);
12             drive1 = new Drive(car.Drive);
13 
14             //調用委托實例方法
15 
16             //使用委托實例中的Invoke方法進行調用
17             drive0.Invoke("Leo");
18             //使用簡寫方法
19             drive1("DuDu");
20 
21 
22             drive0 += drive1;
23             drive0.Invoke("Leo");
24 
25             Console.ReadKey();
26 
27         }
28     }

  運行結果如下:

  使用+=或者-=操作能更加方便,且利於理解。

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved