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

首頁 > 編程 > .NET > 正文

.NET筆記之:Delegate內部原理的分析

2024-07-10 13:16:20
字體:
來源:轉載
供稿:網友

 首先我們要弄清楚什么是委托?相信大家對委托并不陌生,委托其實就是一種定義方法簽名的類型;有關于委托的詳細介紹,大家可以參考MSDN中作出的介紹,鏈接為:。這里我就不做具體介紹了;

  這篇文章我主要是想告訴大家委托的內部到底是什么樣的結構,我們先通過一個簡單的demo來復習一下委托: 

復制代碼 代碼如下:


using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace _01Delegate
 {
     //約束的指向方法的簽名,也就是一個強類型的指針
     public delegate int AddDele(int a, int b);

     class Program
     {
         static void Main(string[] args)
         {
             //定義一個委托變量,注意指向第一個方法的時候一定要用new關鍵字 后面的可以用+=
             AddDele delStatic = new AddDele(Add);
             //使用委托:靜態方法的委托
             Console.WriteLine(delStatic(3, 4));

             //實例方法的委托
             Program p = new Program();
             AddDele delInstance = new AddDele(p.AddInstance);
             //輸出:9
             Console.WriteLine(delInstance(4, 5));

             Console.ReadKey();
         }

         //靜態方法
         static int Add(int a, int b)
         {
             return a + b;
         }

         //實例方法
         public int AddInstance(int a, int b)
         {
             return a + b;
         }
     }
 }


  上面代碼中,分別使用委托對靜態方法和實例方法進行調用,如果這段代碼看起來還是很吃力的話,建議就我前面提供的鏈接好好的鞏固一下委托的相關內容。

 

  開始重點:委托的內部構造

  委托內部可以分為三個部分:分別為_target,_methodPtr和委托鏈;(拿上面的demo為例)

  _target:顧名思義,就是委托的目標函數,如果是靜態方法的話,_target就為null;如果是實例方法的話,_target指向的就是當前的實例,上例中delInstance的_target的值為p(Program的實例);

  _methodPtr:方法指針,指向的是內存中該方法的地址;

  委托鏈:通過+=操作形成的委托鏈,其實指向的就是一個個的方法;

  我簡單的畫了一張圖來描述委托內部構造:(如下)

.NET筆記之:Delegate內部原理的分析


這些都是本人的一些理解,如果有錯誤的地方歡迎大家指出并相互討論學習,希望這篇文章對大家理解委托有所幫助,同時也是為了提高自己而記錄下自己的一點學習積累。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岑巩县| 扎鲁特旗| 朝阳市| 金溪县| 怀安县| 五大连池市| 鞍山市| 梁河县| 延庆县| 牟定县| 会同县| 岳池县| 信丰县| 临猗县| 吐鲁番市| 西充县| 凤凰县| 阜城县| 凤阳县| 衡山县| 武安市| 陆川县| 通化市| 雅江县| 罗平县| 龙井市| 延边| 子洲县| 托克托县| 广平县| 巴塘县| 雷州市| 浙江省| 南宁市| 长汀县| 慈溪市| 昭通市| 延川县| 丹江口市| 于田县| 凤山县|