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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

聲明一個委托,委托一般出現在類之外,本例隨便

delegate?void?Prink(string?str);

創建與委托管理的方法,他們的簽名必須一致

?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";

?????//進行委綁定

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

//回調方法

?????prink(str);

?????Console.ReadKey();

}

上述示例,在類內部聲明了一個Prink委托類型.他具有和關聯方法一樣的簽名(參數,返回值),否則會編譯錯誤.將方法Upper傳給了Prink構造函數,也就是將方法Upper指派給了Prink委托,并將其引用賦值給了prink變量,prink變量保存了Upper方法的指針,實現對Upper的回調.

再一個,在Main函數中添加下面代碼:

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

?prink(str);

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

????interface?IInterface

????{

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

????}

????class?Student:IInterface

????{

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

????????{

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

????????}

????}

????class?Teacher:IInterface

????{

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

????????{

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

????????}

}

Main函數寫上執行代碼:

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

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

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

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

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

分別輸出,我是學生,我是老師.

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

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

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

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

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

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

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

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

很像,有木有,有木有.

委托將方法當作參數進行傳遞,并根據傳入的方法來動態的改變方法調用。只要為委托提供相同簽名的方法,就可以與委托綁定.

而接口約束了實現接口的類所存在的方法,根據實例化類型找到該方法,接口保障了子類必須實現接口方法.

都可以實現統一方法的調用.委托是參數類型不同,接口類是實例化對象不同.簡單的說,委托就是?一個方法容器,你能往里面放很多方法,然后統一調用,一個委托代表一個真實的方法

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

+=和-=操作符分別進行綁定和解除綁定的操作,

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);

}

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

委托的補充,回調方法真正的調用者是Invoke.可以在代碼中顯示調用

prink.Invoke(str);

轉載于:https://www.cnblogs.com/jamesliu/archive/2011/08/18/2144278.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。