婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 解析.Net 4.0 中委托delegate的使用詳解

解析.Net 4.0 中委托delegate的使用詳解

熱門標簽:戶外地圖標注軟件手機哪個好用 鄭州400電話辦理 聯通 五常地圖標注 智能電話營銷外呼系統 電銷語音自動機器人 長春呼叫中心外呼系統哪家好 凱立德導航官網地圖標注 地圖標注和認領 萊蕪外呼電銷機器人價格
.Net中的委托從功能上講和c語言或者c++中的方法指針類似,可以像調用方法一樣調用委托完成某個功能,或返回某類結果。但是.Net畢竟是更高級的語言,委托Delegate也更高級了,委托是一種數據接口,它包含調用目標和調用方法的指針;而在.Net中定義的委托都繼承自MulticastDelegate即多播委托,所謂的多播委托是指可以包含多個調用方法的委托。
一. 先來看下委托的定義:
如下C#代碼定義委托
public delegate void DoSomething(int times);
委托的定義包含5個部分
1) public表示委托的可訪問性
2) delegate關鍵字表示要定義一個委托
3) void表示委托定義方法的返回值
4) DoSomething是委托的名字
5) (int times) 是委托方法的參數列表,此處的參數列表可以包括ref參數,也可以有out參數,同樣也可以有parms可變數量參數;需要注意如果委托中有多個調用方法,使用out參數時只能返回委托最后執行成功的一個委托方法的計算值
在C#中定義委托非常簡單,只比方法定義的返回值之前多一個delegate關鍵字即可。
可是我們知道所有的用戶定義委托都繼承自MulticastDelegate;而MulticastDelegate是一個類;所以自定義的委托肯定也是一個類;看下上述代碼的IL代碼就可以證明我們的推斷:
復制代碼 代碼如下:

.class public auto ansi sealed delegates.DoSomething
    extends [mscorlib]System.MulticastDelegate
{
    // Methods
    .method public hidebysig specialname rtspecialname
        instance void .ctor (
            object 'object',
            native int 'method'
        ) runtime managed
    {
    } // end of method DoSomething::.ctor

    .method public hidebysig newslot virtual
        instance void Invoke (
            int32 times
        ) runtime managed
    {

    } // end of method DoSomething::Invoke

 
    .method public hidebysig newslot virtual
        instance class [mscorlib]System.IAsyncResult BeginInvoke (
            int32 times,
            class [mscorlib]System.AsyncCallback callback,
            object 'object'
        ) runtime managed
    {

    } // end of method DoSomething::BeginInvoke

 
    .method public hidebysig newslot virtual
        instance void EndInvoke (
            class [mscorlib]System.IAsyncResult result
        ) runtime managed
    {

    } // end of method DoSomething::EndInvoke

} // end of class delegates.DoSomething

二. 定義了委托,當然是為了使用它,來看下如何使用委托:
在.Net中有三種委托的形式,分別是方法、匿名方法和lambda表達式;我們用方法定義的形式看下委托的使用方法
復制代碼 代碼如下:

using System;

namespace delegates
{
 public delegate void DoSomething(int times);

    class Program
    {
        static void Main(string[] args)
        {
            //聲明委托變量并給委托變量賦值
            DoSomething @do = DoA;
            //可以使用+號或者+=給委托增加方法
            @do += DoB;
            //執行委托時將按照委托的添加順序先后執行委托中的方法
            @do(1);
            //也可以通過-號或者-= 從委托中移除方法
            @do -= DoA;
            @do(2);

            @do -= DoB;
            //將委托中的所有方法都移除掉之后,委托照樣是可以調用的,只是什么都不做
            @do(3);

            Console.Read();
        }
       //定義一個委托相同參數和返回值的方法
        static void DoA(int times)
        {
            Console.WriteLine("Do A {0}", times);
        }

 
        //定義一個委托相同參數和返回值的方法
        static void DoB(int times)
        {
            Console.WriteLine("Do B {0}", times);
        }
    }
}

如上代碼中的Main方法,首先我們定義了委托DoSomething的變量@do,并將DoA方法直接賦值給此委托變量;然后我們又使用+=符號或者+號給此委托添加了另一個方法;當然也可以使用-或者-=從委托中去掉方法。
委托比C/C++方法指針強大的地方在于其可以容納多個方法,也可以執行+/-操作從方法列表中添加或者刪除掉方法。
在執行委托加減運算時有幾個問題需要我們注意:
1. 委托聲明的寫法
委托聲明時可以用如下寫法
復制代碼 代碼如下:

DoSomething @do = DoA;

這其實是一種簡短的寫法,我們知道在.Net 1.x中這樣寫是不允許的只有到.Net 2.0時才允許這么寫,在.Net 1.x中必須寫成
復制代碼 代碼如下:

DoSomething @do = new DoSomething(DoA);

我們要在聲明時就給@do賦予DoA加上DoB
復制代碼 代碼如下:

DoSomething @do = DoA + DoB;

這么寫是不行的,編譯器不干了;必須使用.Net 1.x中的寫法
復制代碼 代碼如下:

DoSomething @do = new DoSomething(DoA) + new DoSomething(DoB);

2. 從委托中減去委托中本不存在的方式時會發生什么呢?
請看如下代碼:
復制代碼 代碼如下:

DoSomething @do = DoA;
@do -= DoB;

第一行代碼我生命了@do并將DoA賦予它;第二行代碼我嘗試從@do中減去DoB,DoB并沒有在@do的方法列表中存在,這樣會發生什么情況呢?首先編譯器沒有報錯,程序可以正常的編譯;執行代碼發現可以程序可以正常執行,調用@do委托時正確的執行了DoA方法;這說明了.Net包容了我們程序員犯的錯,我們從委托變量中減去一個委托中并不包含的方法時,不會報錯會正常的執行。
3. 對委托做減法,所有委托都減完了,會怎樣呢?看如下代碼
復制代碼 代碼如下:

DoSomething @do = new DoSomething(DoA) + new DoSomething(DoB);
@do -= DoA;
@do -= DoB;
@do(1);

這樣的代碼可以成功編譯,但是在運行時會報NullReferenceException;這顯然不是我們希望的,所以對委托做減法時要特別注意。
復制代碼 代碼如下:

span style="text-decoration: line-through;">public delegate void DoIt(string task);

class Test
{
    static void Main(string[] args)
    {
        //DoIt聲明,賦予一個參數更寬泛的方法是合法的
        DoIt doIt = new DoIt(DoItImpl);
        doIt("hello");
    }

    //比委托定義中的參數更寬泛,string類型可以隱式轉換成object
    static void DoItImpl(object task)
    {
        Console.WriteLine("DoItImpl {0}",task);
    }
}
/span>

您可能感興趣的文章:
  • 深入委托與多播委托的詳解
  • 深入c# Func委托的詳解
  • 深入理解C#中常見的委托
  • 經典的委托排序(深入分析)
  • 基于C#委托的深入分析
  • 對c#中委托的理解
  • C#零基礎學習理解委托
  • C#委托初級使用的實例代碼

標簽:宣城 西寧 湖州 紅河 福州 衢州 岳陽 西藏

巨人網絡通訊聲明:本文標題《解析.Net 4.0 中委托delegate的使用詳解》,本文關鍵詞  解析,.Net,4.0,中,委托,delegate,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解析.Net 4.0 中委托delegate的使用詳解》相關的同類信息!
  • 本頁收集關于解析.Net 4.0 中委托delegate的使用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人欧美一区二区三区小说| 国产东北露脸精品视频| 久久se精品一区精品二区| 欧美日韩中字一区| 亚洲高清中文字幕| 91黄色在线观看| 亚洲福利视频导航| 欧美一级在线观看| 高清beeg欧美| 亚洲人快播电影网| 555夜色666亚洲国产免| 久久精品国产在热久久| 久久看人人爽人人| 成人黄色小视频在线观看| 亚洲欧美日韩小说| 欧美人狂配大交3d怪物一区| 日韩精品国产精品| 亚洲精品一区二区三区影院| 国产成人自拍网| 五月天一区二区三区| 亚洲精品一区二区精华| 91久久精品网| 国产一区在线视频| 日本亚洲欧美天堂免费| 国产精品高潮呻吟| 欧美日韩成人在线| 9l国产精品久久久久麻豆| 天天亚洲美女在线视频| 国产精品九色蝌蚪自拍| 日韩一区二区三区高清免费看看| eeuss鲁片一区二区三区在线看| 亚洲超碰97人人做人人爱| 中文字幕久久午夜不卡| 欧美一区二区在线观看| 国产精品自在欧美一区| 亚洲国产日韩在线一区模特| 久久久久久99久久久精品网站| 在线国产电影不卡| 99视频国产精品| 91亚洲精华国产精华精华液| 国产精品系列在线播放| 久久99国产精品久久| 麻豆视频观看网址久久| 视频一区视频二区中文字幕| 丝袜美腿亚洲综合| 日韩 欧美一区二区三区| 免费在线观看不卡| 波多野洁衣一区| 色久优优欧美色久优优| 国产很黄免费观看久久| 欧美日韩国产美女| 亚洲一二三四区| 亚洲乱码国产乱码精品精可以看 | 天堂一区二区在线| 一区二区三区蜜桃| 亚洲一区二区三区四区五区黄| 激情欧美一区二区三区在线观看| 欧美高清www午色夜在线视频| 国产精品网曝门| 久久国产免费看| 91麻豆精品国产91久久久 | 成人精品视频一区二区三区尤物| 日韩免费电影网站| 青娱乐精品视频| 91精品国产综合久久久蜜臀图片| 国产拍欧美日韩视频二区| 亚洲一区二区三区免费视频| 国内精品伊人久久久久av影院| 色综合天天性综合| 国产精品美女一区二区| 亚洲成人免费av| www.亚洲色图.com| 国产日韩欧美精品在线| 狠狠色丁香九九婷婷综合五月 | 久久精品国产久精国产| 91福利区一区二区三区| 中文字幕不卡在线| a4yy欧美一区二区三区| 国产精品嫩草影院av蜜臀| 国产成人自拍在线| 国产精品久久午夜夜伦鲁鲁| 国产成人综合精品三级| 国产午夜一区二区三区| 久久精品国产77777蜜臀| 日韩视频免费直播| 国产精品一品二品| 国产精品天干天干在线综合| 春色校园综合激情亚洲| 国产女人水真多18毛片18精品视频| 国产成人日日夜夜| 一区二区成人在线| 婷婷开心激情综合| 欧美一区二区三区影视| 岛国一区二区在线观看| 日韩制服丝袜av| 久久蜜臀中文字幕| 99精品欧美一区二区三区综合在线| 精品不卡在线视频| 91成人网在线| 国产精品白丝jk白祙喷水网站| 国产精品你懂的| 久久综合色天天久久综合图片| 成人高清在线视频| 美女高潮久久久| 亚洲二区在线观看| 国产精品天美传媒| 久久久久久久一区| 日韩午夜激情视频| 欧美亚洲国产一区二区三区va| 国产精品亚洲综合一区在线观看| 亚洲一区二区三区视频在线| 国产欧美一区二区精品性| 91麻豆精品国产91久久久更新时间 | 亚洲午夜视频在线观看| 精品第一国产综合精品aⅴ| 欧美日韩国产天堂| 欧美日韩精品欧美日韩精品| 日韩一区二区免费高清| 久久久蜜桃精品| 国产精品电影一区二区三区| 亚洲图片有声小说| 国产精品一区免费在线观看| 91天堂素人约啪| 欧美xxxxx牲另类人与| 精品成a人在线观看| 国产亚洲精品bt天堂精选| 国产亚洲精久久久久久| 国产日韩av一区二区| 亚洲永久精品国产| 日精品一区二区| 懂色av噜噜一区二区三区av| 99九九99九九九视频精品| 色噜噜狠狠色综合欧洲selulu| 欧美色图在线观看| 精品国产露脸精彩对白| 国产欧美一区二区精品久导航 | 亚洲一区二区精品3399| 亚洲成人在线网站| 麻豆91在线看| 91浏览器在线视频| 欧美xxxx在线观看| 欧美日韩精品一区二区天天拍小说| 精品乱码亚洲一区二区不卡| 国产高清在线观看免费不卡| 欧美大片免费久久精品三p| 日韩中文字幕区一区有砖一区| 国产高清在线观看免费不卡| 黄网站免费久久| 亚洲成人av福利| 91小视频在线免费看| 久久九九久久九九| 国产麻豆精品在线观看| 久久久久久久久久久久久女国产乱| 日韩影院在线观看| 欧美精品1区2区3区| 蜜桃视频一区二区三区在线观看| 精品视频一区 二区 三区| 天堂蜜桃一区二区三区 | 国产精品天天看| 国产精品一区免费视频| 538在线一区二区精品国产| www.av亚洲| 国产99久久精品| 国产精品久久久久国产精品日日| 国产欧美日韩三区| 久久―日本道色综合久久| 精品久久国产字幕高潮| 日韩三区在线观看| 欧美一区二区三区成人| 亚洲美女屁股眼交3| 国产精品综合一区二区三区| 亚洲精品成人精品456| 午夜激情久久久| 国内精品久久久久影院色| 99国产精品一区| 日韩一区二区在线观看| 国产精品视频yy9299一区| 亚洲成a人片在线观看中文| 久久99国内精品| 一本大道久久a久久综合| 欧美一区二区三区免费| 亚洲欧洲美洲综合色网| 日本va欧美va欧美va精品| 欧美一级一区二区| 亚洲欧洲日产国产综合网| 日韩精品亚洲一区二区三区免费| 国产在线视频精品一区| 色综合久久久久综合| 久久久久久久久久久久电影| 国产精品国产三级国产a| 免费成人在线网站| 欧美怡红院视频| 国产精品免费aⅴ片在线观看| 亚洲资源中文字幕| 色婷婷综合久久久久中文一区二区| 日韩一二三四区| 日韩av午夜在线观看| 91精品91久久久中77777| 亚洲色欲色欲www在线观看| 麻豆国产一区二区|