您的位置: 旅游網(wǎng) > 八卦 >> 爸爸

    新特性探究之委托與匿名委托呢

    發(fā)布時(shí)間:2021-10-26 07:18:46

    delegate經(jīng)常被人用來(lái)與回調(diào)相比較,其實(shí)兩者在某種程度上由很多共同點(diǎn)。不過(guò)delegate有很多更加強(qiáng)大的地方。

    首先,delegate中可以注冊(cè)任意多個(gè)回調(diào),在一個(gè)delegate被調(diào)用的時(shí)候,已經(jīng)注冊(cè)的過(guò)程將會(huì)被逐個(gè)調(diào)用。

    其次,delegate允許注冊(cè)一個(gè)對(duì)象的方法,而不像C++中指可以使用靜態(tài)方法或者全局方法作為函數(shù)指針,提供了更多的靈活性,同時(shí)也暗示我們,delegate中按照某種方式保存了object的很多信息。

    在C#2.0的匿名delegate中,我們甚至可以訪問(wèn)當(dāng)前匿名委托的上下文變量。接下來(lái)的文章中我們將會(huì)通過(guò)實(shí)際的例子,來(lái)看看強(qiáng)大的delegate。

    首先,讓我們看看在C#1.2中的一個(gè)典型的委托的寫(xiě)法。

    public delegate void TheEvent(int a);

    public void test()

    {

    TheEvent testdel1 = new TheEvent(del1);

    testdel1(12);

    }

    public void del1(int x)

    {

    iteLine(\"output x : {0}\", x);

    }

    現(xiàn)在我們可以寫(xiě)成這樣:

    public void test()

    {

    TheEvent testdel1 = del1;

    testdel1(12);

    }

    或者將程序改寫(xiě)為:

    delegate void TheEvent2(int a);

    public void test2()

    {

    int a = 12;

    TheEvent ev2 = delegate(ref int x)

    { iteLine(\"output x : {0}\", x); };

    ev2( ref a);

    }

    比起1.2來(lái),delegate的可讀性更好,但是似乎沒(méi)有本質(zhì)的提高?慢著,讓我們看看下面的例子。

    public static void test3()

    {

    int a = 12;

    int y = 32;

    TheEvent ev2 = delegate(ref int x)

    { iteLine(\"output x + y : {0}\", x + y); };

    ev2( ref a);

    }

    注意,匿名函數(shù)中的內(nèi)容!x + y的值被正確的輸出了,而在1.2中,委托對(duì)于局部變量是沒(méi)有除參數(shù)外的訪問(wèn)方式的。這樣做有些什么好處呢?

    讓我們看一個(gè)更加復(fù)雜的例子:

    同比下滑了3.83%。但在這份并不光彩的成績(jī)單中 public static void test4()

    {

    int a = 12;

    int y = 32;

    TheEvent ev2 = delegate(ref int x)

    { iteLine(\"output x + y : {0}\", x + y); eep(100); };

    //ev2(ref a);

    IAsyncResult ar = ginInvoke(ref a,

    delegate(IAsyncResult ar2)

    {ite(\"Operation finished: {0} on thread ID:{1}, is pool: {2}\",Completed,tHashCode(), ThreadPoolThread);}

    , null);

    iteLine(\"do some other calculations while counter thread is working\");

    ite(\"work status : {0} Main Thread ID:{1}, is pool: {2}\",

    Completed,

    tHashCode(),

    ThreadPoolThread);

    eep(500);

    dInvoke(ref a, ar);

    }

    這個(gè)例子中使用了系統(tǒng)線程池對(duì)于任務(wù)進(jìn)行排隊(duì),適合于IO或者計(jì)算密集型的操作的時(shí)候。使用匿名委托最大的好處在于可以完整地克隆當(dāng)前運(yùn)行空間上下文的可用變量,雖然這可能從另一個(gè)層面上也增加了同步的復(fù)雜度,所謂有得必有失。查看本文來(lái)源

    頸動(dòng)脈粥樣硬化有什么危害
    合肥治療包皮包莖費(fèi)用多少錢(qián)
    江中黃芪生脈飲適用哪類(lèi)人
    猜你會(huì)喜歡的
    猜你會(huì)喜歡的
    主站蜘蛛池模板: 国产在线精品网址你懂的| 日本5级床片全免费| 免费看污视频的网站| 色先锋影音资源| 好想找个男人狠狠的曰| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 久久精品国产一区二区三区肥胖| 福利小视频在线观看| 国产成人免费ā片在线观看老同学 | 91视频综合网| 大奶校花催眠全世界| 久久中文字幕视频| 欧美成人精品福利在线视频| 又黄又爽又色的黄裸乳视频| 久久精品国产99国产精品亚洲 | 久草网视频在线| 亚洲sss视频| 亚洲午夜无码久久| 亚洲国产成人精品无码区在线秒播 | 女人扒下裤让男人桶到爽| 乱人伦中文视频在线观看免费| 精品99在线观看| 国产国产精品人在线视| 91香蕉在线看私人影院| 小草视频免费观看| 久久精品国产99精品国产2021| 毛片在线观看网站| 动漫av在线播放| 青青操在线视频| 国产男人女人做性全过程视频| avaaddamshdxxx| 成人性生交大片免费看好| 久久精品国产精品亚洲艾草网| 欧美成人免费观看| 伊人大杳焦在线| 精品国产一区二区三区无码| 国产对白真实伦视频在线| 51国产黑色丝袜高跟鞋| 波多野吉衣中文字幕| 国产一区二区三区在线电影| 色综合久久天天影视网|