<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

      <noframes id="xpjh9">
      VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
      SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
      當前位置:
      首頁 > 編程開發 > C#編程 >
      • C#教程之C# 委托和事件

      • 2019-01-21 20:13 來源:未知

      一、委托

      1. 定義

        委托是一個類,它定義了方法的類型,使用委托可以將多個方法綁定到同一個委托變量,當調用此變量時,可以依次調用所有綁定的方法。

       

      2. 測試事例

        假如你需要向別人問好,在國際化社會,你可能需要用多種語言問候。

        普通的思路可以用 if 或者 swith 判斷然后調用相應的代碼,但是可拓展行差。

        下面介紹使用委托的辦法。

      復制代碼
       1 using System;
       2 using System.Collections.Generic;
       3 using System.Linq;
       4 using System.Text;
       5 using System.Threading.Tasks;
       6 
       7 namespace Delegate
       8 {
       9     /// <summary>
      10     /// 委托定義方法的簽名,沒有函數體
      11     /// 委托可以定義在類外面
      12     /// </summary>
      13     /// <param name="name">姓名</param>
      14     public delegate void GreetingDelegate(string name);
      15 
      16     class Program
      17     {
      18         /// <summary>
      19         /// 英文問候
      20         /// 注意函數簽名要與委托相同
      21         /// </summary>
      22         /// <param name="name">姓名</param>
      23         private static void EnglishGreeting(string name)
      24         {
      25             Console.WriteLine("Morning! " + name);
      26         }
      27 
      28         /// <summary>
      29         /// 中文問候
      30         /// 注意函數簽名要與委托相同
      31         /// </summary>
      32         /// <param name="name">姓名</param>
      33         private static void ChineseGreeting(string name)
      34         {
      35             Console.WriteLine("早上好! " + name);
      36         }
      37 
      38         /// <summary>
      39         /// 問候
      40         /// </summary>
      41         /// <param name="name">姓名</param>
      42         /// <param name="greeting">委托</param>
      43         private static void GreetPeople(string name, GreetingDelegate greetingDelegate)
      44         {
      45             greetingDelegate(name);                 // 調用綁定的方法
      46         }
      47 
      48         static void Main(string[] args)
      49         {
      50             GreetingDelegate greetingDelegate;
      51             // 注意 第一次綁定要用 =
      52             greetingDelegate = EnglishGreeting;     // 將英文問候綁定到委托
      53             GreetPeople("Lin", greetingDelegate);   // 此時綁定了一個個方法
      54             greetingDelegate += ChineseGreeting;    // 再將中文問候綁定到委托
      55             GreetPeople("Lin", greetingDelegate);   // 此時綁定了兩個方法
      56             greetingDelegate -= EnglishGreeting;    // 將英文問候從委托中移除
      57             GreetPeople("Lin", greetingDelegate);   // 此時綁定了一個個方法
      58 
      59             Console.ReadKey();
      60         }
      61     }
      62 }
      復制代碼

       

       3. 運行截圖

       

       

       

       

      二、事件

      1. 委托和事件的區別

        委托是具有相同簽名的函數(方法)的類型,事件是委托的應用方式之一。

       

      2. 測試事例

        我們還是使用上述委托所用的事例,那么使用事件的代碼如下:

      復制代碼
       1 using System;
       2 using System.Collections.Generic;
       3 using System.Linq;
       4 using System.Text;
       5 using System.Threading.Tasks;
       6 
       7 namespace Event
       8 {
       9     /// <summary>
      10     /// 委托定義方法的簽名,沒有函數體
      11     /// 委托可以定義在類外面
      12     /// </summary>
      13     /// <param name="name">姓名</param>
      14     public delegate void GreetingDelegate(string name);
      15     
      16     /// <summary>
      17     /// 問候管理類
      18     /// </summary>
      19     public class GreetingManage
      20     {
      21         public event GreetingDelegate makeGreet;       // 聲明事件
      22 
      23         public void GreetPeople(string name)            // 問候
      24         {
      25             if (makeGreet != null)
      26             {
      27                 makeGreet(name);
      28             }
      29         }
      30     }
      31 
      32     class Program
      33     {
      34         /// <summary>
      35         /// 英文問候
      36         /// 注意函數簽名要與委托相同
      37         /// </summary>
      38         /// <param name="name">姓名</param>
      39         private static void EnglishGreeting(string name)
      40         {
      41             Console.WriteLine("Morning! " + name);
      42         }
      43 
      44         /// <summary>
      45         /// 中文問候
      46         /// 注意函數簽名要與委托相同
      47         /// </summary>
      48         /// <param name="name">姓名</param>
      49         private static void ChineseGreeting(string name)
      50         {
      51             Console.WriteLine("早上好! " + name);
      52         }
      53 
      54         static void Main(string[] args)
      55         {
      56             GreetingManage gm = new GreetingManage();
      57             //gm.makeGreet = EnglishGreeting;       // 報錯,不能用 = 賦值
      58             gm.makeGreet += EnglishGreeting;        // 添加綁定方法
      59             gm.makeGreet += ChineseGreeting;
      60             gm.GreetPeople("Lin");                  // 此時綁定了兩個方法
      61             gm.makeGreet -= EnglishGreeting;        // 去除綁定
      62             gm.GreetPeople("Lin");                  // 此時綁定了一個方法
      63 
      64             Console.ReadKey();
      65         }
      66     }
      67 }
      復制代碼

       

      3. 運行截圖

       

      相關教程
      江苏快3 张北 | 馆陶 | 襄阳 | 海拉尔 | 霍邱 | 兴化 | 保亭 | 永新 | 铜川 | 滕州 | 安康 | 克孜勒苏 | 宜昌 | 周口 | 常德 | 深圳 | 吕梁 | 淄博 | 榆林 | 张家口 | 黄山 | 泗洪 | 巴彦淖尔市 | 宝应县 | 瑞安 | 三亚 | 贺州 | 嘉峪关 | 海北 | 那曲 | 黔东南 | 佛山 | 新疆乌鲁木齐 | 丹东 | 丽江 | 温州 | 大同 | 肥城 | 高密 | 博尔塔拉 | 济源 | 新泰 | 金华 | 亳州 | 昌吉 | 阿勒泰 | 宿迁 | 阳江 | 崇左 | 南安 | 泰州 | 襄阳 | 阿里 | 简阳 | 寿光 | 洛阳 | 昆山 | 新疆乌鲁木齐 | 怒江 | 招远 | 邹平 | 漯河 | 营口 | 河源 | 宁波 | 三门峡 | 正定 | 牡丹江 | 防城港 | 浙江杭州 | 保山 | 赤峰 | 如皋 | 屯昌 | 泸州 | 大连 | 防城港 | 威海 | 漯河 | 项城 | 黔南 | 承德 | 保亭 | 珠海 | 新余 | 伊犁 | 滁州 | 安阳 | 铜陵 | 湘潭 | 屯昌 | 宁夏银川 | 日喀则 | 荆州 | 山南 | 怀化 | 淮安 | 濮阳 | 佛山 | 镇江 | 常州 | 通化 | 攀枝花 | 杞县 | 蓬莱 | 醴陵 | 巢湖 | 台湾台湾 | 温州 | 寿光 | 自贡 | 昭通 | 东台 |