91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何實現委托

發布時間:2021-10-21 14:23:46 來源:億速云 閱讀:167 作者:小新 欄目:編程語言

這篇文章主要介紹了C#如何實現委托,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    我們首先來看一個非常簡單的例子:

namespace LinQ  {      //聲明一個委托,這個委托可以指向任何傳入兩個整數并且返回一個整數的方法      public delegate int MathOP(int i, int j);        //這個類包含了MathOP將指向的方法Add      class DelegateMath       {          public static int Add(int i, int j) { return i + j; }      }        class Program      {          static void Main(string[] args)          {              //創建一個指向DelegateMath.Add()的委托              MathOP o = new MathOP(DelegateMath.Add);              //使用委托間接調用Add()方法              Console.WriteLine("10+20={0}",o(10,20));              //或者可以這樣,如果不清楚o.Invoke,請繼續往下看。如果您知道了,那這篇文章就可以忽略了             Console.WriteLine("10+20={0}", o.Invoke(10, 20));             Console.ReadLine();          }      }  }

運行結果是:

C#如何實現委托

    由這個簡單的例子可見委托的使用非常簡單,如果要將目標對象方法插入指定委托,只要向委托的構造函數傳入方法名即可,當然這個方法要與定義這個委托時的返回值,參數類型以及個數都完全一樣。這是我們就可以使用類似直接函數調用的語法來調用指向的成員:DelegateMath.Add(int i,int j);

    我們接著深入的討論一下這個委托。東西嘛,不能光看表面,尤其是社會上的淫。不多說,"深入"之,先看一副圖:

C#如何實現委托

這是一個反編譯工具經過反編譯之后出來的結果,主要看中間選中的那個LinQ.MathOP,這是我們定義的委托,它是一個類,但是我們并沒有為這個類添加了那么多的不知道從哪里來的方法啊。其實當C#編譯器處理委托類型時,它會先自動生成一個派生自System.MulticastDelegate的密封類。這個類與它的基類:System.Delegate一起為委托提供必要的基礎設施。可以看到生成的MathOP類定義了三個公共方法。Invoke應該是核心方法,因為它被用來以同步的方式調用委托類型維護的每個方法,這里所謂的同步就是指調用者必須等待調用完成才能繼續進行。BeginInvoke()和EndInvoke()方法能在第二個執行線程上異步調用當前的方法,這兩個方法主要用在多線程上面,現在大家只要知道有這么個東西就行了,以后的博文會有持續的說明。 LinQ.MathOP的偽代碼應該是這樣的:

sealed class MathOP:System.MulticastDelegate {     public MathOP(object target,uint functionAddress);     public int Invoke(int i,int j);     public IAsyncResult BeginInvoke(int i,int j,AsyncCallback cb,object state);     public int EndInvoke(IAsyncResult result); }

    最后說明一下,委托還可以指向任意數量的out或ref參數(以及用params關鍵字標記的數組)的方法。如果包含了out或者ref參數,Invoke()以及BeginInvoke()方法的簽名是一樣的,但是EndInvoke()方法稍有變化,其中包括了委托類型定義的所有out或ref參數,當然,這個不需要我們的關心。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C#如何實現委托”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南宫市| 右玉县| 大足县| 湾仔区| 股票| 云安县| 高淳县| 阿拉善左旗| 大港区| 都匀市| 涟水县| 柏乡县| 磐安县| 龙川县| 丘北县| 宁强县| 满洲里市| 利川市| 华坪县| 格尔木市| 元氏县| 囊谦县| 西吉县| 新营市| 勐海县| 云梦县| 密云县| 合作市| 桂平市| 商都县| 错那县| 吉水县| 涞水县| 遂平县| 台东市| 金寨县| 景谷| 临沭县| 榕江县| 阿拉善盟| 康定县|