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

歡迎訪問 生活随笔!

生活随笔

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

C#

如何在 C# 中使用 委托

發布時間:2023/12/4 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 C# 中使用 委托 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

委托是一個類型安全的函數指針,它可以引用與委托具有相同簽名的方法,你可以利用 委托 實現事件或者回調函數,多播委托 可以引用一個或者多個具有相同簽名的方法。

理解 委托

本質上來說,委托包含了一個對方法的引用,概念上和 C ++ 上的函數指針是一樣的,唯一不一樣的是 C# 中的 委托 是類型安全的,你可以將方法作為參數傳給 委托,而從讓 委托 持有對方法的引用,委托常用于定義成 回調函數 和 事件處理,一般用 delegate 關鍵詞去聲明,可以將 delegate 定義成 類平級,也可以嵌套在 類中。

使用 委托 一般有以下三個步驟:

  • 初始化 declaration

  • 實例化 instantiation

  • 調用 ? invocation

委托簽名的語法格式如下:

delegate?result-type?identifier?([parameters])

下面的代碼展示了如何套用語法格式實現一個委托。

public?delegate?void?MyDelegate(string?text);

上面的代碼可以看出,委托的名字為 MyDelegate, 它的返回值為 void,并且接收一個 string 類型的參數,這就意味著,委托需指向的方法也必須和這個委托具有相同的簽名,上面只是 委托 的一個定義,要使用的話,還得塞入一個同簽名的方法,代碼如下。

MyDelegate?d?=?new?MyDelegate(ShowText);

一旦定義完成并且成功實例化后,接下來就可以執行這個委托了,如下代碼所示:

d("Hello?World...");

這里的 d 就是 委托實例,除了上面這種調用方法,還可以調用委托的 Invoke() 來執行委托所引用的方法。

d.Invoke("Hello?World...");

如果你有一個方法接收兩個參數作為入參,兩個參數的累計值作為方法的返回值,那這種委托該怎么定義呢?完整代碼如下:

using?System;namespace?Delegates {public?delegate?int?MyDelegate(int?x,?int?y);class?Program{static?int?Sum(int?x,?int?y){return?x?+?y;}static?void?Main(){MyDelegate?d?=?new?MyDelegate(Sum);???????????int?result?=?d.Invoke(12,?15);Console.WriteLine(result);Console.ReadLine();}} }?

委托實踐

首先看下完整的代碼清單。

using?System; namespace?Delegates {public?delegate?void?MyDelegate(string?text);class?Program{public?static?void?ShowText(string?text){Console.WriteLine(text);}static?void?Main(){MyDelegate?d?=?new?MyDelegate(ShowText);d("Hello?World...");Console.ReadLine();}} }

值得注意的是,你可以使用 + 號將多個對象賦給一個 委托實例,這就讓原來的 普通委托 成為了 多播委托,除了 + 號,也可以使用 Delegate 下的靜態 Combine 方法 來合并多個 delegate 實例,有一點要注意,運行時委托會在內部維護了一個 list 集合來存放待執行的方法,下面的代碼展示了如何使用 Combine 來合并多個 委托實例。

myDelegate?d1?=?new?myDelegate(Method1); myDelegate?d2?=?new?myDelegate(Method2); myDelegate?multicastDelegate?=?(myDelegate)Delegate.Combine(d1,?d2); multicastDelegate.Invoke();

所謂的 多播委托 就是一個委托可以指向多個方法,值得注意的是,委托實例是不可變的,這就意味著從內部list 中 新增 或者 刪除 一個委托實例,將會創建一個新的委托實例,從而變相的實現 list 的變更。

多播委托實踐

下面的代碼片段展示了一個多播委托,要注意這里的 委托實例 的用法,這里我使用了 += 操作符 實現將 多個具有相同簽名的方法灌入到 委托實例 中。

using?System; namespace?Delegates {public?delegate?void?MyDelegate();class?Program{public?static?void?Method1(){Console.WriteLine("Inside?Method1...");}public?static?void?Method2(){Console.WriteLine("Inside?Method2...");}static?void?Main(){MyDelegate?d?=?null;d?+=?Method1;d?+=?Method2;d.Invoke();Console.ReadLine();}} }

事件驅動編程 模式中會大量使用委托,因為 委托 不需要關心它是被哪一個實例對象所引用,而只需關心它所引用的方法是否具有相同簽名,合理的使用委托,可以提高你的代碼復用 并且提升代碼設計的靈活性,更多關于 委托的知識,可參考:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/

譯文鏈接:https://www.infoworld.com/article/2996770/how-to-work-with-delegates-in-csharp.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的如何在 C# 中使用 委托的全部內容,希望文章能夠幫你解決所遇到的問題。

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