.NET筆記之:Delegate內(nèi)部原理的分析_.Net教程

      編輯Tag賺U幣
      教程Tag:.NETDelegate添加

      推薦:基于asp.net下使用jquery實(shí)現(xiàn)ajax的解決方法
      本文以最簡(jiǎn)單的方法為新手示范如何使用jquery實(shí)現(xiàn)ajax技術(shù)(所以本文是專為新手所寫(xiě),老鳥(niǎo)勿噴,大神此處省略一萬(wàn)字)。至于什么是jquery什么是ajax,自己谷歌去

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

        這篇文章我主要是想告訴大家委托的內(nèi)部到底是什么樣的結(jié)構(gòu),我們先通過(guò)一個(gè)簡(jiǎn)單的demo來(lái)復(fù)習(xí)一下委托: 

      復(fù)制代碼 代碼如下:www.wf0088.com

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

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

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

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

      Console.ReadKey();
      }

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

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

        上面代碼中,分別使用委托對(duì)靜態(tài)方法和實(shí)例方法進(jìn)行調(diào)用,如果這段代碼看起來(lái)還是很吃力的話,建議就我前面提供的鏈接好好的鞏固一下委托的相關(guān)內(nèi)容。

       

       

        開(kāi)始重點(diǎn):委托的內(nèi)部構(gòu)造

        委托內(nèi)部可以分為三個(gè)部分:分別為_(kāi)target,_methodPtr和委托鏈;(拿上面的demo為例)

        _target:顧名思義,就是委托的目標(biāo)函數(shù),如果是靜態(tài)方法的話,_target就為null;如果是實(shí)例方法的話,_target指向的就是當(dāng)前的實(shí)例,上例中delInstance的_target的值為p(Program的實(shí)例);

        _methodPtr:方法指針,指向的是內(nèi)存中該方法的地址;

        委托鏈:通過(guò)+=操作形成的委托鏈,其實(shí)指向的就是一個(gè)個(gè)的方法;

        我簡(jiǎn)單的畫(huà)了一張圖來(lái)描述委托內(nèi)部構(gòu)造:(如下)

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

      分享:基于.NET中:自動(dòng)將請(qǐng)求參數(shù)綁定到ASPX、ASHX和MVC的方法(菜鳥(niǎo)必看)
      這篇文章的目的就是告訴初學(xué)者如何自動(dòng)將客戶端用AJAX發(fā)送的參數(shù)自動(dòng)綁定為強(qiáng)類型的成員屬性或方法參數(shù)

      來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2013-05-02
      相關(guān).Net教程