在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

第12章 委托[《.net框架程序設計》讀書筆記]

第12章 委托[《.net框架程序設計》讀書筆記]

更新時間:2022-05-16 文章作者:未知 信息來源:網絡 閱讀次數:

第十二章 委托

一、 委托的使用

靜態委托和實例委托,使用方法類似,這里給出一個使用可變參數委托的例子:

using System;



public class DelCls

{

public delegate void DelDef(params string[] strParams);



public static void CallDel(DelDef dd)

{

if(dd != null) //請務必在此處進行判斷,這是個好習慣

{

dd("Hello", "world");

}

}

}



public class DelIns

{

//聲明為private(私有)成員并不影響在類型內部使用委托

private static void ClsCallStr(params string[] strParams) //類型方法

{

//將字符串數組并順序輸出

foreach(string str in strParams)

{

Console.Write("{0} ", str);

}

Console.WriteLine();

}



public void InsCallStr(params string[] strParams) //實例方法

{

//將字符串數組并反序輸出

for(int i = strParams.Length - 1; i >= 0; i --)

{

Console.Write("{0} ", strParams[i]);

}



Console.WriteLine();

}



public static void Main()

{

DelIns di = new DelIns();



DelCls.DelDef dd = null;

Console.WriteLine("combine two delegate:");

dd += new DelCls.DelDef(DelIns.ClsCallStr);

dd += new DelCls.DelDef(di.InsCallStr);

DelCls.CallDel(dd);



Console.WriteLine("remove the first delegate:");

dd -= new DelCls.DelDef(DelIns.ClsCallStr);

DelCls.CallDel(dd);

}

}



/*運行結果

combine two delegate:

Hello world

world Hello

remove the first delegate:

world Hello

*/

在C#中使用委托方法:

l 創建委托所使用的方法必須和委托聲明相一致(參數列表、返回值都一致)

l 利用 +=、-=來進行委托的鏈接或取消鏈接或直接使用Delegate.Combine和Delegate.Remove方法來實現

l 使用MulticastDelegate的實例方法GetInvocationList()來獲取委托鏈中所有的委托



二、 委托揭秘

所有的委托都繼承自MulticastDelegate,編譯器在編譯時刻為委托的聲明生成了一個完整的委托類,重點注意其中的一些成員:

ü 構造函數,傳入委托的目標對象(實例)及指向回調方法的整數

ü 繼承自MulticastDelegate的_target(System.Object)字段

ü 繼承自MulticastDelegate的_methodPtr(System.Int32)字段

ü 繼承自MulticastDelegate的_prev(System.MulticastDelegaet)字段

ü 生成的與方法聲明相一致Invoke函數用以調用方法

可利用MulticastDelegate中的Method及Target屬性來考察_methodPtr及_target字段的性質。

關于編譯器生成的委托類及Invoke方法的調用情況,可通過使用ILDAsm.exe查看執行文件的IL代碼獲得

將上例中類型DelIns中的Main方法作如下修改,以實驗GetInvocationList及MulticastDelegate中屬性的使用:

public class DelIns

{



public static void Main()

{



Delegate[] arrDel = dd.GetInvocationList();

foreach(DelCls.DelDef d in arrDel)

{

Console.WriteLine("Object type: {0}, Method name: {1}",

(d.Target != null) ? d.Target.GetType().ToString() : "null",

d.Method.Name);

}



}



}

/*運行結果



Object type: null, Method name: ClsCallStr

Object type: DelIns, Method name: InsCallStr



*/

三、 委托判等

首先判斷_methodPtr及_target字段是否相等,若不等則返回false;

若相等,繼續判斷_prev是否為null(指向委托鏈頭部的委托),若為null,則相等返回true;

若不等,繼而判斷委托鏈上所有委托對象,重復上述步驟。



可見牽涉到委托鏈的時候是個遞歸判斷的過程。

四、 委托鏈

l 首先被加入到委托鏈中的委托位于委托鏈的尾部,但首先被調用,這是因為Invoke中利用遞歸對委托函數進行調用,這樣位于頭部的委托最后被調用。

l 委托調用后的返回值,只是最后一次被調用方法的返回值,即委托鏈頭部委托的返回值

l 每調用一次Remove方法只刪除匹配的第一個委托鏈

五、 委托與反射

以下是.net framework sdk文檔提供的Delegate.CreateDelegate方法列表:

創建指定類型的委托以表示指定的靜態方法。

[C#] public static Delegate CreateDelegate(Type, MethodInfo);

創建指定類型的委托,該委托表示要對指定的類實例調用的指定實例方法。

[C#] public static Delegate CreateDelegate(Type, object, string);

創建指定類型的委托,該委托表示指定類的指定靜態方法。

[C#] public static Delegate CreateDelegate(Type, Type, string);

創建指定類型的委托,該委托表示要按指定的大小寫敏感度對指定類實例調用的指定實例方法。

[C#] public static Delegate CreateDelegate(Type, object, string, bool);



下面的示例演示了創建靜態方法委托、實例方法委托以及動態調用委托:

using System;

using System.Reflection;



public class DelReflection

{

public delegate void GoGo(string strPam, Int32 nPam);



public static void ClsGo(string strPam, Int32 nPam)

{

Console.WriteLine("In class, String:{0}, Int32:{1}", strPam, nPam);

}



public void InsGo(string strPam, Int32 nPam)

{

Console.WriteLine("In instance, String:{0}, Int32:{1}", strPam, nPam);

}



public static void Main()

{

Delegate d = null;



d = Delegate.CreateDelegate(typeof(GoGo), typeof(DelReflection), "ClsGo");

if(d != null)

d.DynamicInvoke(new Object[]{"Hello", 45});



DelReflection dr = new DelReflection();

d = Delegate.CreateDelegate(typeof(GoGo), dr, "InsGo");

if(d != null)

d.DynamicInvoke(new Object[]{"Hello", 45});

}

}

/*運行結果

In class, String:Hello, Int32:45

In instance, String:Hello, Int32:45

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 欧美日韩不卡在线视频| 色18美女社区| 色婷婷一区二区三区在线观看| 日韩欧美色视频| 国产精品秘入口18禁麻豆免会员| 日韩一级片一区二区| 久久久久久久激情| 日本一二三区视频在线| 中国丰满人妻videoshd | 少妇人妻无码专区视频| 嫩草视频免费在线观看| 9色porny| 久久久成人精品一区二区三区| 日本手机在线视频| 97在线免费公开视频| 国产又粗又爽又黄的视频| 成人性生生活性生交12| 欧美啪啪免费视频| 成人黄色大片网站| 国产911在线观看| 日本特级黄色大片| 污片在线免费看| 999精彩视频| 久久观看最新视频| 久久久久久久少妇| 日韩欧美亚洲天堂| 青青草原av在线播放| 国产精品12345| www.中文字幕在线| 日韩精品一区二区三区久久| 欧美 激情 在线| 国产熟女高潮视频| 亚洲一区 在线播放| jizz18女人| 国产精品区在线| 五月天激情播播| 国产探花在线观看视频| 天堂av免费看| 日本精品久久久久久久久久| 国产美女在线一区| 欧美a v在线播放| 不要播放器的av网站| 人妻无码久久一区二区三区免费| 欧美乱大交xxxxx潮喷l头像| 国产精品又粗又长| 色一情一乱一伦一区二区三区日本 | 欧美在线观看成人| 亚洲第一中文av| 国产精品igao网网址不卡| 大片在线观看网站免费收看| 青青草视频在线免费播放| av观看免费在线| 日本网站在线看| 最新av在线免费观看| 欧美国产亚洲一区| 久久婷婷中文字幕| 久久黄色片视频| 911福利视频| 亚洲人精品午夜射精日韩| 九九九在线观看视频| 国产成人生活片| 亚洲欧美自偷自拍另类| 欧美日韩dvd| 深夜黄色小视频| 欧美国产视频一区| 中文字幕网av| 国产精品又粗又长| 激情在线观看视频| 黄色一级片黄色| 天堂在线中文在线| 男女av免费观看| 久久人人爽人人爽人人av| 伊人色在线观看| 欧美日韩在线中文| 精品少妇在线视频| 热这里只有精品| 欧美一级免费在线| 黄色一级一级片| 成人免费看片视频在线观看| www亚洲成人| 天天干在线影院| av天堂永久资源网| 男人和女人啪啪网站| 青青视频免费在线观看| 97精品国产97久久久久久粉红| 免费的av在线| 秋霞在线一区二区| 免费观看黄色的网站| 狠狠操狠狠干视频| 亚洲精品20p| 亚洲va在线va天堂va偷拍| 中文字幕av专区| 国产v片免费观看| 久久精品一二三四| 香蕉视频xxx| 男女爱爱视频网站| www插插插无码免费视频网站| 免费cad大片在线观看| 国产又粗又大又爽的视频| 潘金莲一级淫片aaaaaa播放1| 青青在线视频观看| 婷婷丁香激情网| 天天影视色综合| 国产又大又长又粗又黄| 老司机午夜网站| 国产男女免费视频| 爱情岛论坛成人| 最新免费av网址| 国产精品人人妻人人爽人人牛| 国产美女三级视频| 亚洲妇熟xx妇色黄蜜桃| 警花观音坐莲激情销魂小说| 青青青国产在线观看| 欧美成人黑人猛交| www.日日操| 四虎成人在线播放| 和岳每晚弄的高潮嗷嗷叫视频| 熟妇人妻va精品中文字幕| 天天视频天天爽| 亚洲天堂第一区| 波多野结衣家庭教师视频| 午夜两性免费视频| 欧美不卡在线播放| 久久久久xxxx| aa免费在线观看| 亚洲免费av网| 久久9精品区-无套内射无码| 一二三av在线| 日韩中文在线字幕| 精品视频无码一区二区三区| 国产在线视频三区| 黄色成人免费看| 18黄暴禁片在线观看| 小早川怜子一区二区三区| 国产一二三四区在线观看| 国产精品国产三级国产专区51| 国产成人黄色网址| 国产美女永久无遮挡| 99sesese| 国产高潮免费视频| 免费国产a级片| 97干在线视频| 男人天堂av片| 缅甸午夜性猛交xxxx| 国产九色porny| 99色这里只有精品| 成人免费视频91| 日韩日韩日韩日韩日韩| 九九热只有这里有精品| 91精品国产毛片武则天| 国产午夜精品视频一区二区三区| 日本福利视频在线观看| www.夜夜爱| 韩国一区二区av| 国内自拍视频一区| 三上悠亚av一区二区三区| 手机av在线网| 可以在线看黄的网站| 久久艹国产精品| 日本熟妇人妻xxxxx| 久久久精品麻豆| 91亚洲一区二区| 亚洲精品蜜桃久久久久久| 一本大道熟女人妻中文字幕在线| 99热成人精品热久久66| 天天综合天天添夜夜添狠狠添| 久久观看最新视频| 日韩精品一区二区三区不卡 | 少妇高潮毛片色欲ava片| 日韩一级片免费视频| 亚洲色图 在线视频| 两性午夜免费视频| 日韩精品一区在线视频| 亚洲欧美在线精品| 青草视频在线观看视频| 狠狠热免费视频| 久久久久久久久影视| 国产第一页视频| www插插插无码免费视频网站| 日韩欧美黄色大片| 成人在线国产视频| 永久免费黄色片| 欧美污视频网站| 蜜臀av.com| 激情文学亚洲色图| 99久久激情视频| 日韩免费视频播放| 九九久久久久久| wwww.国产| 激情综合网俺也去| 日本a在线免费观看| 好色先生视频污| 午夜剧场高清版免费观看| 欧美日韩激情视频在线观看| 国产一级不卡视频| 一区中文字幕在线观看| 一级黄色录像在线观看| 美女一区二区三区视频| 免费在线观看毛片网站| 各处沟厕大尺度偷拍女厕嘘嘘 |