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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

基础拾遗------委托详解

發(fā)布時(shí)間:2025/4/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基础拾遗------委托详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基礎(chǔ)拾遺:

基礎(chǔ)拾遺------特性詳解

基礎(chǔ)拾遺------webservice詳解

基礎(chǔ)拾遺------redis詳解

基礎(chǔ)拾遺------反射詳解

基礎(chǔ)拾遺------委托詳解

基礎(chǔ)拾遺------接口詳解

基礎(chǔ)拾遺------泛型詳解

基礎(chǔ)拾遺-----依賴注入

基礎(chǔ)拾遺-----數(shù)據(jù)注解與驗(yàn)證

基礎(chǔ)拾遺-----mongoDB操作

基礎(chǔ)拾遺----RabbitMQ

前言:

  C# 中的委托(Delegate)類似于 C 或 C++ 中函數(shù)的指針。委托是存有對(duì)某個(gè)方法的引用的一種引用類型變量。引用可在運(yùn)行時(shí)被改變。委托(Delegate)特別用于實(shí)現(xiàn)事件和回調(diào)方法。所有的委托都派生自 System.Delegate 類。把一個(gè)方法當(dāng)作參數(shù)傳遞,讓其它方法進(jìn)行調(diào)用執(zhí)行。

好比:今天中午不想出去,委托小明幫我?guī)Х蒿?#xff0c;我要買飯,但是小明幫我買的。

1.委托的聲明

  委托聲明決定了可由該委托引用的方法。委托可指向一個(gè)與其具有相同標(biāo)簽的方法。

1.1.delegate

  1.1.1. 0-23個(gè)參數(shù),可以有返回值也可以沒(méi)有返回值

public delegate int MyDelegateEventHandler (string parm);

注:

  (1).此委托指向的方法必須是參數(shù)為string類型,返回類型為int類型的。其他聲明類比所得。

  (2).EventHandler是c# 命名規(guī)范,當(dāng)然我理解規(guī)范就是可以隨意啦。

  1.1.2.委托的多播

每個(gè)委托都只包含一個(gè)方法調(diào)用,如果調(diào)用多個(gè)方法,就需要多次顯示調(diào)用這個(gè)委托。如果同一個(gè)委托調(diào)用多個(gè)方法,我們就可以用多播委托

public delegate void MyDelegate ();public voidMyMethod() { //# } public void MyMethod1() { //# } public void MyMethod2() { //# } MyDelegateEnventHander myDelegate; myDelegate=new MyDelegateEventHander(MyMethod); myDelegate+=new MyDelegateEventHander(MyMethod1); ........... //調(diào)用 myDelegate();

?注:

  1.委托對(duì)象可使用 "+" 運(yùn)算符進(jìn)行合并;

  2."-" 運(yùn)算符可用于從合并的委托中移除組件委托;

  3.委托指定方法類型必須一致;

  4.返回類型一般為void,但非必須;

  5.GetInvocationList獲取委托索引

if (MyDelegate != null) System.Delegate[] dels = MyDelegate .GetInvocationList(); for (int i = 0; i < dels.Length; i++) {MyDelegate -= dels[i] as MethodDelegate;}

以上是利用GetInvocationList獲取委托索引的一個(gè)簡(jiǎn)單應(yīng)用。

1.2.Action

?Action至少0個(gè)參數(shù),至多16個(gè)參數(shù),無(wú)返回值。

Action 表示無(wú)參,無(wú)返回值的委托 Action<int,string> 表示有傳入?yún)?shù)int,string無(wú)返回值的委托 Action<int,string,bool> 表示有傳入?yún)?shù)int,string,bool無(wú)返回值的委托 Action<int,int,int,int> 表示有傳入4個(gè)int型參數(shù),無(wú)返回值的委托 public void Test<T>(Action<T> action,T p){action(p);}

1.3.Func

?Func至少0個(gè)參數(shù),至多16個(gè)參數(shù),根據(jù)返回值泛型返回。必須有返回值,不可void

Func是無(wú)返回值的泛型委托 Func<int> 表示無(wú)參,返回值為int的委托 Func<object,string,int> 表示傳入?yún)?shù)為object, string 返回值為int的委托 Func<object,string,int> 表示傳入?yún)?shù)為object, string 返回值為int的委托 Func<T1,T2,,T3,int> 表示傳入?yún)?shù)為T1,T2,,T3(泛型)返回值為int的委托

1.4.predicate

1.4.1.predicate 是返回bool型的泛型委托;

1.4.2.predicate<int> 表示傳入?yún)?shù)為int 返回bool的委托;

1.4.3.Predicate有且只有一個(gè)參數(shù),返回值固定為bool;

public delegate bool Predicate<T> (T obj)

?

2.委托的實(shí)例化

2.1.delegate

public delegate int MyDelegateEventHandler (string parm) public int MyMethod(string parm) {//# }MyDelegateEventHandler MyDelegate=new MyDelegateEventHandler(MyMethod)

注:委托實(shí)例化的時(shí)候,委托對(duì)象必須使用 new 關(guān)鍵字來(lái)創(chuàng)建,且與一個(gè)特定的方法有關(guān)。委托參數(shù)中的方法不含參數(shù)。

2.2.Action的使用

public void Test<T>(Action<T> action, T p){action(p);}private void Action(string s){#}//調(diào)用 Test<string>(Action,"wyl");

2.3.Func的使用

public int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b) {return func(a, b); } private int Fun(int a, int b) {# } //調(diào)用 Test<int,int>(Fun,100,200)

4.綜上:

4.1.委托類似于 C++ 函數(shù)指針。

4.2.委托允許將方法作為參數(shù)進(jìn)行傳遞。

4.3.委托可用于定義回調(diào)方法。

4.4.委托可以鏈接在一起;多播。

4.5.方法不必與委托簽名完全匹配。


?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/kmonkeywyl/p/5688939.html

總結(jié)

以上是生活随笔為你收集整理的基础拾遗------委托详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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