日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从委托而起(二)认识委托

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从委托而起(二)认识委托 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

新建一個(gè)控制臺(tái)應(yīng)用程序,這個(gè)程序的作用是為一個(gè)字符串改變樣子,所以起個(gè)名字叫Costumeball.嘉賓(字符串)通過一個(gè)個(gè)化妝間(函數(shù))變得漂漂亮亮或奇奇怪怪后一起唱歌跳舞.好享受.

聲明一個(gè)委托,委托一般出現(xiàn)在類之外,本例隨便

delegate?void?Prink(string?str);

創(chuàng)建與委托管理的方法,他們的簽名必須一致

?static?void?Upper(string?str)?

?{

?????Console.WriteLine(str.ToUpper());

?}

?static?void?Lower(string?str)?

?{

?????Console.WriteLine(str.ToLower());

?}

?static?void?Mark(string?str)

?{

?????Console.WriteLine("\""+str+"\"");

?}

聲明委托類型變量delegate?void?Prink(string?str);,

Main方法代碼如下:

static?void?Main(string[]?args)

{

?????string?str="FaTSo";

?????//進(jìn)行委綁定

?????prink?=?new?Prink(Upper);

//回調(diào)方法

?????prink(str);

?????Console.ReadKey();

}

上述示例,在類內(nèi)部聲明了一個(gè)Prink委托類型.他具有和關(guān)聯(lián)方法一樣的簽名(參數(shù),返回值),否則會(huì)編譯錯(cuò)誤.將方法Upper傳給了Prink構(gòu)造函數(shù),也就是將方法Upper指派給了Prink委托,并將其引用賦值給了prink變量,prink變量保存了Upper方法的指針,實(shí)現(xiàn)對(duì)Upper的回調(diào).

再一個(gè),在Main函數(shù)中添加下面代碼:

?prink?=?new?Prink(Mark);

?prink(str);

F5運(yùn)行能看到prink(Mark)也得到了執(zhí)行.先不管他怎么回事現(xiàn)在一起回憶下接口.寫一個(gè)最簡單接口的例子

????interface?IInterface

????{

????????void?SayHi();

????}

????class?Student:IInterface

????{

????????public?void?SayHi()

????????{

????????????Console.WriteLine("我是學(xué)生");

????????}

????}

????class?Teacher:IInterface

????{

????????public?void?SayHi()

????????{

????????????Console.WriteLine("我是老師");

????????}

}

Main函數(shù)寫上執(zhí)行代碼:

???????IInterface?p1;?

????????????p1?=?new?Student();

????????????p1.SayHi();

????????????p1?=?new?Teacher();

????????????p1.SayHi();

分別輸出,我是學(xué)生,我是老師.

???prink?=?new?Prink(Upper);

????????????prink(str);

????????????prink?=?new?Prink(Mark);

????????????prink(str);

????????????p1?=?new?Student();

????????????p1.SayHi();

????????????p1?=?new?Teacher();

????????????p1.SayHi();

很像,有木有,有木有.

委托將方法當(dāng)作參數(shù)進(jìn)行傳遞,并根據(jù)傳入的方法來動(dòng)態(tài)的改變方法調(diào)用。只要為委托提供相同簽名的方法,就可以與委托綁定.

而接口約束了實(shí)現(xiàn)接口的類所存在的方法,根據(jù)實(shí)例化類型找到該方法,接口保障了子類必須實(shí)現(xiàn)接口方法.

都可以實(shí)現(xiàn)統(tǒng)一方法的調(diào)用.委托是參數(shù)類型不同,接口類是實(shí)例化對(duì)象不同.簡單的說,委托就是?一個(gè)方法容器,你能往里面放很多方法,然后統(tǒng)一調(diào)用,一個(gè)委托代表一個(gè)真實(shí)的方法

多播委托,你讓我干嘛,好我馬上去做,你讓我干嘛,好我馬上去做.......

+=和-=操作符分別進(jìn)行綁定和解除綁定的操作,

public?static?void?Main()

{

string?str?=?"FaTSo";

prink?+=?new?Prink(Upper);

prink?+=?new?Prink(Mark);

prink?+=?new?Prink(Lower);

prink?-=?new?Prink(Upper);

prink(str);

}

執(zhí)行后依次輸出?"FaTSo"?fatso,事實(shí)上+=和-=操作分別調(diào)用了Deleagate.Combine和Deleagate.Remove方法,多播委托返回值一般都是void,委托類型非void時(shí),多播委托將返回最后一個(gè)調(diào)用方法的執(zhí)行結(jié)果.

委托的補(bǔ)充,回調(diào)方法真正的調(diào)用者是Invoke.可以在代碼中顯示調(diào)用

prink.Invoke(str);

轉(zhuǎn)載于:https://www.cnblogs.com/jamesliu/archive/2011/08/18/2144278.html

總結(jié)

以上是生活随笔為你收集整理的从委托而起(二)认识委托的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。