小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

委托入門(第一章)

 昵稱10504424 2013-07-17
這幾天認(rèn)真研究了C#的委托與事件,下面對(duì)研究的知識(shí)總結(jié)一下,N年后找出來看一下應(yīng)該也不錯(cuò)。

  歷史上,Windows API經(jīng)常使用C語言風(fēng)格的函數(shù)指針來創(chuàng)建稱為回調(diào)函數(shù)或簡稱為回調(diào)的實(shí)體。使用回調(diào),碼農(nóng)可以使一個(gè)函數(shù)返回報(bào)告給(即回調(diào))程序中的另一個(gè)函數(shù)。

  在.NET Framework里,回調(diào)仍是可能的,它們的功能是由使用更為安全和面向?qū)ο蟮?strong>委托(delegate)來完成的。本質(zhì)上來講,委托是一個(gè)類型安全的對(duì)象,它指向程序中另一個(gè)以后會(huì)被調(diào)用的方法(或多個(gè)方法)。委托類型包含3個(gè)得要的信息:

  當(dāng)一個(gè)委托被創(chuàng)建并提供了上述信息后,它可以在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用其指向的方法??梢钥吹?,.NET Framwwork中每個(gè)委托(包括自定義委托)都被自動(dòng)賦予同步或異步訪問方法的能力,可以不用手工創(chuàng)建與管理一個(gè)Thread對(duì)象而直接調(diào)用另一個(gè)輔助執(zhí)行線程上的方法,這大大簡化了編程工作。

  使用C#定義委托:假定我們要?jiǎng)?chuàng)建一個(gè)名為BinaryOp的委托,它可以指向任何輸入兩個(gè)整數(shù)返回一個(gè)整數(shù)的方法:

  public delegate int BinaryOp(int x,int y);

  當(dāng)C#編譯器處理委托類型時(shí),它先自動(dòng)產(chǎn)生一個(gè)派生自System.MulticastDelegaet的密封類。這個(gè)類與它的基類System.Degelate 一起為委托提供必要的基礎(chǔ)設(shè)施,以維護(hù)以后將要調(diào)用方法的列表。

  寫著寫著突然沒電,沒保存,比改需求還痛苦,沒辦法,只能重來。

  如果我們通過ildasm.exe來查看BinaryOp委托可以看到,生成的BinaryOp類定義了三個(gè)公共方法。Invoke()可能是核心方法,因?yàn)樗挥脕硪酝椒绞秸{(diào)用委托類型維護(hù)的每個(gè)方法。BeginInvoke()和EndInvoke()方法能在第二個(gè)執(zhí)行線程上異步調(diào)用當(dāng)前方法。

  編譯器是如何確切知道怎樣定義Invoke()、BeginInvoke()和EndInvoke()方法的呢?欲知后事如何,請(qǐng)看下面代碼:

  初次接觸委托可能會(huì)感覺很難。不要緊,接下來,讓我們看一個(gè)非常簡單的使用BinaryOp委托的示例,我們以前見過,這是一個(gè)名為Simple Delegate的控制臺(tái)應(yīng)用程序項(xiàng)目。

  .net委托是類型安全的。所以如果讀者試圖將一個(gè)不匹配模式的方法傳入委托,將會(huì)收到編譯期錯(cuò)誤。例如,假定SimpleMath類定義了一個(gè)名為SquareNumber()的方法:

  由于BinaryOp委托公可指向帶有兩個(gè)整數(shù)參數(shù)并返回一個(gè)整數(shù)的方法下面這段代碼是非法的,將無法編譯:

   委托對(duì)象

  我們?cè)趐rogram類型中創(chuàng)建一個(gè)名為DisplayDegelateInfo()的靜態(tài)方法豐富當(dāng)前的示例。這個(gè)方法將輸出傳入的委托類型所維護(hù)的方法的名稱和定義該方法的類的名稱。通過迭代由GetInvocationList()返回的System.Delegate數(shù)組,調(diào)用每個(gè)對(duì)象的Target和method屬性:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多