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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ActionT和FuncT委托

發(fā)布時間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ActionT和FuncT委托 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??????? 泛型Action<T>委托和Func<T>委托是系統(tǒng)定義的兩個泛型委托。

??????? Action<T>委托表示引用一個返回類型為Void的方法。這個委托存在不同的變體,可以傳遞之多16個不同的參數(shù)類型。同時,沒有泛型參數(shù)的Action類可以調(diào)用沒有參數(shù)的方法。例如,Action<in T>表示有一個輸入?yún)?shù)的方法,Action<in T1,in T2>表示有兩個輸入?yún)?shù)的方法。

??????? Func<T>可以以類似的方法使用。不過Func<T>允許調(diào)用帶返回參數(shù)的方法。Func<T>也有不同的變體,之多可以傳遞16個參數(shù)和一個返回類型。例如:Func<out TResult>委托類型可以無參的帶返回類型的方法,Func<in T1,inT2,out Tresult>表示帶兩個參數(shù)和一個返回類型的方法。

??????? 需要記住一個東西,Action<T>中的T可以有多個,但這些T類型都表示不同的輸入類型。Func<T>可以表示帶輸出的方法,T可以有多個,且只有最后一個表示輸出即最后一個是返回類型。Func<in T1,inT2,out Tresult>中的字符in、out在實際代碼中是不會出現(xiàn)的。在VS中,可以通過IntelliSense查看:

Action<T> 的16參數(shù)封裝:

?

Func<T>16參加一個返回的封裝

?

?

?

下邊通過一個簡單的代碼演示一下這兩個泛型委托與一般委托的異同。

第一步:先定義倆函數(shù):

public double MultiplyByTwo(double x) {return x * 2; } public double Square(double x) {return x * x; }

?

這倆函數(shù)有共同的特征:輸入和返回類型都是double

第二步:定義委托數(shù)組,并用這兩個方法的方法名初始化數(shù)組:

delegate double DoubleOp(double x);DoubleOp[] MyDoubleOp = {this.MultiplyByTwo,this.Square};Func<double, double>[] myFunc = //{this.MultiplyByTwo,this.Square};

?

最后:查看輸出

for (int i = 0; i < MyDoubleOp.Length; i++) {Console.WriteLine(MyDoubleOp[i](1.414)); }for (int i = 0; i < myFunc.Length; i++) {Console.WriteLine(myFunc[i](2.236)); }

?

比較一下,其實泛型委托和自定義的委托在使用上沒什么不同。只不過泛型委托Func<T>系統(tǒng)已經(jīng)為我們定義好了,直接使用就可以了,不需要再進行這樣的定義delegate double DoubleOp(double x);。另一個泛型委托Action <T>的使用也是一樣的,只不過不能有返回類型而已。

貼出完整的代碼:

一個簡單的類MyClass類:

public class MyClass {delegate double DoubleOp(double x);public double MultiplyByTwo(double x){return x * 2;}public double Square(double x){return x * x;}public void myDelegate(){DoubleOp[] MyDoubleOp = {this.MultiplyByTwo,this.Square};for (int i = 0; i < MyDoubleOp.Length; i++){Console.WriteLine(MyDoubleOp[i](1.414));}Func<double, double>[] myFunc ={this.MultiplyByTwo,this.Square};for (int i = 0; i < myFunc.Length; i++){Console.WriteLine(myFunc[i](2.236));}} }

?

入口函數(shù):

class Program {static void Main(){EventsSample.MyClass myClass = new EventsSample.MyClass();myClass.myDelegate();Console.Read();}}

?

Technorati 標簽: Action<T>,Func<T>,委托

總結(jié)

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

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