日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# delegate与event,委托与事件

發布時間:2023/12/10 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# delegate与event,委托与事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 委托
    • 示例
  • 事件
    • 實例

  • 博主寫作不容易,孩子需要您鼓勵
  • 萬水千山總是情 , 先點個贊行不行

委托和事件是C#中兩個比較復雜的概念,這篇文章介紹兩個概念與基本用法,讓大家理解C#中的事件處理機制。

委托

委托也叫代理,就是把事情交付給別人去辦,如代購。C#中如果將一個方法委托給一個對象,這個對象就可以全權代理這個方法的執行。
使用委托時首先要定義委托,聲明委托能代理什么類型的方法。

  • 語法格式如下:
  • <訪問修飾符> delegate 返回類型 委托名();

    從上邊的語法格式可以看出,定義委托與定義方法類似。
    委托沒有具體實現,委托能夠代表什么樣的方法由它的返回類型和參數列表決定。如果定義如下的委托:

    public delegate void stuDelegate(string name);

    那么使用stuDelegate委托代表的只可以是沒有返回值,且參數為一個字符串的方法。
    定義了委托之后要使用委托,首先要實例化委托。實例化委托就是將其指向某個方法,即調用委托的構造函數,并將相關聯的方法作為參數傳遞。然后通過調用委托,執行相關方法的代碼,實現委托。

    示例

    使用委托對數組元素按降序排列

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace test {class Program{public delegate bool ShortDelegate(int[] x);static void Main(string[] args){int[] arr = new int[] { 8, 4, 5, 6, 2, 1, 3, 7, 9, 0 };Console.WriteLine("未排序前數組序列為:");foreach (int i in arr){Console.Write("{0},", i);}ShortDelegate MyDelegate;//聲明委托變量MyDelegate = new ShortDelegate(ArrayShort.SortArray);//實例化委托MyDelegate(arr);//調用委托排序Console.WriteLine("\n排序后數組序列為:");foreach (int i in arr){Console.Write("{0},", i);}Console.ReadKey();}}class ArrayShort{public static bool SortArray(int[] Array){ //定義方法SortArray用于按照降序排列for (int i = Array.GetUpperBound(0); i >= 0; i--)//循環從后向前分別取出數組中的一個元素{//冒泡排序,將數值小的元素移到后面,直到所有的元素按照降序排列for (int j = 0; j <= i; j++){if (Array[j] <= Array[i]){Swap(ref Array[j], ref Array[i]);//交換兩個元素位置}}}return true;}static void Swap(ref int x,ref int y)//交換兩個數{int z = x;x = y;y = z;}}}

    運行結果:

    事件

    事件是C#中的一個高級概念,是操作發生時允許執行特定應用程序的代碼的機制。事件要么在相關聯的操作發生前發生,要么在操作發生后發生。例如,當用戶單擊窗口中的按鈕時,將引發一個事后事件,以允許執行特定于應用程序的方法。類或對象可以通過事件向其他類或對象通知發生的相關事情。發送事件的類成為發行者,接受事件的類成為訂閱者。在典型的C#Windows窗體或者web應用開發中,可以訂閱由控件引發的事件。

  • 在C#類中定義和使用事件一般有下面幾個步驟。
  • 1、在類中聲明關于事件的委托。
  • public delegate void 事件類型名稱(object sender,EventArgs e);

    在事件類型名稱建議使用EventHandler結尾。如果想自定義事件的參數EventArgs,可以用EventArgs類派生自己的事件參數類,也可以沒有參數。

  • 2、在類中聲明事件,使用步驟1的委托作為事件的類型。
  • public event 事件類型的名稱 事件名稱;
  • 3、在類中需要引發事件的方法中,編寫引發事件的方法。
  • 事件名稱(this, new EventArgs());

    或者

    if(事件名稱!=null) 事件名稱(this, new EventArgs());
  • 4、訂閱事件,當事件發生時通知訂戶。
  • 帶有事件的類實例.事件名稱+=new 事件名稱(事件處理方法名稱);
  • 5、編寫事件處理方法。
  • public void 事件處理方法名稱(object sender,EventArgs e) { //添加事件處理代碼 }
  • 6、在適當的條件下觸發事件,即需要調用步驟3中的引發事件的方法。
  • 實例

    假設設計一個高檔熱水器,通電加熱超過97℃時,揚聲器會進行提示現在溫度,顯示器提示水快燒開了。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace test {class Program{public delegate bool ShortDelegate(int[] x);static void Main(string[] args){Heater heater = new Heater();Alarm alarm = new Alarm();heater.BoilEvent += alarm.MakeAlert;heater.BoilEvent += Display.ShowMsg;heater.BoilWater();Console.ReadKey();}}public class Heater{private int temperature;//水溫public delegate void BoilHandle(int x);//聲明關于事件的委托public event BoilHandle BoilEvent;//聲明水要燒開的事件public void BoilWater(){ //燒水的方法for (int i = 0; i <= 100; i++){temperature = i;if (temperature > 96){if (BoilEvent != null){BoilEvent(temperature);}}}}}public class Alarm{public void MakeAlert(int x){ //水開燒開的報警方法Console.WriteLine("Alarm:dididid,水已經{0}℃了",x);}}public class Display{public static void ShowMsg(int x){Console.WriteLine("Display:水快開了,當前溫度為:{0}℃",x);}}}

    運行結果:

    ------------------------------------------------------------------------------------------分割線 ------------------------------------------------------------------------------------------
    • 博主簡介:
    • 工業自動化上位機軟件工程師、機器視覺算法工程師、運動控制算法工程師。目前從業于智能制造自動化行業。 博主郵箱:2296776525@qq.com
    • 幫忙點個贊吧。哈哈。

總結

以上是生活随笔為你收集整理的C# delegate与event,委托与事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。