.NET筆記之:Delegate內(nèi)部原理的分析
首先我們要弄清楚什么是委托?相信大家對委托并不陌生,委托其實就是一種定義方法簽名的類型;有關(guān)于委托的詳細介紹,大家可以參考MSDN中作出的介紹,鏈接為:http://msdn.microsoft.com/zh-cn/library/vstudio/ms173171.aspx。這里我就不做具體介紹了;
這篇文章我主要是想告訴大家委托的內(nèi)部到底是什么樣的結(jié)構(gòu),我們先通過一個簡單的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關(guān)鍵字 后面的可以用+=
AddDele delStatic = new AddDele(Add);
//使用委托:靜態(tài)方法的委托
Console.WriteLine(delStatic(3, 4));
//實例方法的委托
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;
}
//實例方法
public int AddInstance(int a, int b)
{
return a + b;
}
}
}
上面代碼中,分別使用委托對靜態(tài)方法和實例方法進行調(diào)用,如果這段代碼看起來還是很吃力的話,建議就我前面提供的鏈接好好的鞏固一下委托的相關(guān)內(nèi)容。
開始重點:委托的內(nèi)部構(gòu)造
委托內(nèi)部可以分為三個部分:分別為_target,_methodPtr和委托鏈;(拿上面的demo為例)
_target:顧名思義,就是委托的目標函數(shù),如果是靜態(tài)方法的話,_target就為null;如果是實例方法的話,_target指向的就是當前的實例,上例中delInstance的_target的值為p(Program的實例);
_methodPtr:方法指針,指向的是內(nèi)存中該方法的地址;
委托鏈:通過+=操作形成的委托鏈,其實指向的就是一個個的方法;
我簡單的畫了一張圖來描述委托內(nèi)部構(gòu)造:(如下)
這些都是本人的一些理解,如果有錯誤的地方歡迎大家指出并相互討論學習,希望這篇文章對大家理解委托有所幫助,同時也是為了提高自己而記錄下自己的一點學習積累。
相關(guān)文章
ASP.NET向Javascript傳遞變量兩種實現(xiàn)方法
ASP.NET向Javascript傳遞變量兩種實現(xiàn)方法,需要的朋友可以參考下2012-12-12
ASP.NET 2.0/3.5中直接操作Gridview控件插入新記錄
Gridview控件中并沒有提供像在FormView和DetailsView控件中那樣直接插入新記錄操作的支持。2008-11-11
IIS上部署Asp.net core Webapi的實現(xiàn)步驟
ASP.NET Core Web API是構(gòu)建RESTful應用程序的理想平臺,本文主要介紹了IIS上部署Asp.net core Webapi的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下2024-07-07
Repeater控件動態(tài)變更列(Header,Item和Foot)信息實現(xiàn)思路
需求開發(fā)一個小報表,顯示最近五個月的summary的數(shù)量統(tǒng)計,報表會隨月份的變化而變化,接下來為大家詳細介紹下實現(xiàn)方法,感興趣的各位不要錯過了哈2013-03-03
ASP.NET MVC5網(wǎng)站開發(fā)文章管理架構(gòu)(七)
繼上一篇把member的用戶部分完成,現(xiàn)在開始做文章管理部分。文章部分根據(jù)涉及顯示現(xiàn)實文章列表,發(fā)布文章,修改和刪除文章等功能。最終的實現(xiàn)目標是使用權(quán)限來控制用戶是否能進行相應操作,管理員權(quán)限的會顯示全部文章列表和我的文章列表,普通用戶只顯示我的文章列表2015-09-09
Asp.Net 網(wǎng)站優(yōu)化系列之數(shù)據(jù)庫優(yōu)化分字訣上 分庫
當我們的數(shù)據(jù)量很小的時候,我們會把用戶表,博客表,論壇表,閃存表等等都砸在一個庫里,我們的業(yè)務增長的很好,在不久之后我們盡力的優(yōu)化了查詢,但是效果依然不佳,這時候用分字訣的時機到了。2010-06-06

