小編給大家分享一下.NET中Delegate內(nèi)部原理的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
先通過(guò)一個(gè)簡(jiǎn)單的demo來(lái)復(fù)習(xí)一下委托:
代碼如下:
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)造:(如下)
以上是“.NET中Delegate內(nèi)部原理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標(biāo)題:.NET中Delegate內(nèi)部原理的示例分析-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://www.rwnh.cn/article22/djpgjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、用戶體驗(yàn)、企業(yè)網(wǎng)站制作、定制開(kāi)發(fā)、電子商務(wù)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容