国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

03.C#委托(二章1.1)

2019-11-17 02:41:12
字體:
供稿:網(wǎng)友

03.C#委托(二章1.1)

  一章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)成:

  1. 委托類型的聲明
  2. 滿足委托類型簽名的方法
  3. 委托類型實(shí)例
  4. 調(diào)用委托實(shí)例

  聲明委托使用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é)果如下:

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

  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 合水县| 江永县| 台前县| 张家川| 平山县| 福泉市| 奉贤区| 镇原县| 惠水县| 阿拉善左旗| 绥阳县| 马龙县| 涿州市| 呼玛县| 乌鲁木齐县| 九龙坡区| 永仁县| 马边| 安庆市| 西宁市| 辽阳县| 龙江县| 琼结县| 台东市| 宣城市| 榆中县| 裕民县| 巴林左旗| 孝义市| 洪江市| 青岛市| 东平县| 定兴县| 金门县| 延吉市| 广平县| 咸宁市| 南城县| 甘德县| 竹北市| 永丰县|