程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Mcad學習筆記之委托再理解

Mcad學習筆記之委托再理解

編輯:關於ASP.NET

(delegate的構造器,MulticastDelegate,BeginInvoke,EndInvoke,Invoke4個方法的探討)

先定義一個委托如下:

public delegate void myEventHandler(int i,out string o);

再用MSIL反匯編程序(Ildasm.exe)來觀看反匯編代碼

其實CLR為我們做了4件事情

1.定義一個構造器

2.定義一個虛方法BeginInvoke

3.定義一個虛方法EndInvoke

4.定義一個虛方法Invoke

(1)在反匯編代碼中我看到如下片斷:

.class auto ansi sealed nested public myEventHandler
    extends [mscorlib]System.MulticastDelegate
{
} // end of class myEventHandler

由此可以知道其實我們聲明的委托myEventHandler就是一個密封類

它的父類是System.MulticastDelegate

看到這裡,我的一個疑惑被解除了

以前我也自己定義過委托,總是感覺好像在程序中到處都可以定義委托,在類裡面和類的外部都可以定義,一直不知道為什麼?

現在我基本明白了,其實委托是一個類,類可以在哪裡定義,委托就可以在哪裡定義。

(2)我們現在再來看看構造器

在這之前,有必要搞清楚委托的繼承關系

System.Delegate

---System.MulticastDelegate

------ConsoleApplication1.myEventHandler

現在我們實例化一個委托:

myEventHandler my=new myEventHandler(staticCall);

實際上它是在調用這個委托的構造器

下面的是這個構造器的代碼:

public myEventHandler(object @object, IntPtr method);

第一個參數應該是類實例的實例

第二個參數應該是委托的方法信息

這個構造器會再調用它父類的構造器,父類構造器代碼如下:

protected MulticastDelegate(object target, string method) : base(target, method)
{
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved