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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# 带返回值的action_C#委托的介绍(delegate、Action、Func、predicate)

發布時間:2024/7/19 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# 带返回值的action_C#委托的介绍(delegate、Action、Func、predicate) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞。事件是一種特殊的委托。

1.委托的聲明

(1). delegate

delegate我們常用到的一種聲明

Delegate至少0個參數,至多32個參數,可以無返回值,也可以指定返回值類型。

例:public?delegate?int?MethodtDelegate(int?x,?int?y);表示有兩個參數,并返回int型。

(2). Action

Action是無返回值的泛型委托。

Action 表示無參,無返回值的委托

Action 表示有傳入參數int,string無返回值的委托

Action 表示有傳入參數int,string,bool無返回值的委托

Action 表示有傳入4個int型參數,無返回值的委托

Action至少0個參數,至多16個參數,無返回值。

例:

public void Test(Action action,T p)

{

action(p);

}

(3). Func

Func是有返回值的泛型委托

Func 表示無參,返回值為int的委托

Func 表示傳入參數為object, string 返回值為int的委托

Func 表示傳入參數為object, string 返回值為int的委托

Func 表示傳入參數為T1,T2,,T3(泛型)返回值為int的委托

Func至少0個參數,至多16個參數,根據返回值泛型返回。必須有返回值,不可void

例:

public int Test(Funcfunc,T1 a,T2 b)

{

return func(a, b);

}

(4) .predicate

predicate 是返回bool型的泛型委托

predicate 表示傳入參數為int 返回bool的委托

Predicate有且只有一個參數,返回值固定為bool

例:public?delegate?bool?Predicate (T obj)

2.委托的使用

(1).Delegate的使用

public delegate int MethodDelegate(int x, int y);

private static MethodDelegate method;

static void Main(string[] args)

{

method = new MethodDelegate(Add);

Console.WriteLine(method(10,20));

Console.ReadKey();

}

private static int Add(int x, int y)

{

return x + y;

}

(2).Action的使用

static void Main(string[] args)

{

Test(Action,"Hello World!");

Test(Action, 1000);

Test(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表達式定義委托

Console.ReadKey();

}

public static void Test(Action action, T p)

{

action(p);

}

private static void Action(string s)

{

Console.WriteLine(s);

}

private static void Action(int s)

{

Console.WriteLine(s);

}

可以使用 Action 委托以參數形式傳遞方法,而不用顯式聲明自定義的委托。 封裝的方法必須與此委托定義的方法簽名相對應。 也就是說,封裝的方法必須具有四個均通過值傳遞給它的參數,并且不能返回值。 (在 C# 中,該方法必須返回 void)通常,這種方法用于執行某個操作。

(3).Func的使用

static void Main(string[] args)

{

Console.WriteLine(Test(Fun,100,200));

Console.ReadKey();

}

public static int Test(Func func, T1 a, T2 b)

{

return func(a, b);

}

private static int Fun(int a, int b)

{

return a + b;

}

(4).?predicate的使用

泛型委托:表示定義一組條件并確定指定對象是否符合這些條件的方法。此委托由 Array 和 List 類的幾種方法使用,用于在集合中搜索元素。

static void Main(string[] args)

{

Point[] points = { new Point(100, 200),

new Point(150, 250), new Point(250, 375),

new Point(275, 395), new Point(295, 450) };

Point first = Array.Find(points, ProductGT10);

Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);

Console.ReadKey();

}

private static bool ProductGT10(Point p)

{

if (p.X * p.Y > 100000)

{

return true;

}

else

{

return false;

}

}

使用帶有 Array.Find 方法的 Predicate 委托搜索 Point 結構的數組。如果 X 和 Y 字段的乘積大于 100,000,此委托表示的方法 ProductGT10 將返回 true。Find 方法為數組的每個元素調用此委托,在符合測試條件的第一個點處停止。

3.委托的清空

(1).在類中申明清空委托方法,依次循環去除委托引用。

方法如下:

public MethodDelegate OnDelegate;

public void ClearDelegate()

{

while (this.OnDelegate != null)

{

this.OnDelegate -= this.OnDelegate;

}

}

(2).如果在類中沒有申明清空委托的方法,我們可以利用GetInvocationList查詢出委托引用,然后進行去除。

方法如下:

public MethodDelegate OnDelegate;

static void Main(string[] args)

{

Program test = new Program();

if (test.OnDelegate != null)

{

System.Delegate[] dels = test.OnDelegate.GetInvocationList();

for (int i = 0; i < dels.Length; i++)

{

test.OnDelegate -= dels[i] as MethodDelegate;

}

}

}

4.委托的特點

委托類似于 C++ 函數指針,但它們是類型安全的。

委托允許將方法作為參數進行傳遞。

委托可用于定義回調方法。

委托可以鏈接在一起;例如,可以對一個事件調用多個方法。

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

5.總結:

Delegate至少0個參數,至多32個參數,可以無返回值,也可以指定返回值類型

Func可以接受0個至16個傳入參數,必須具有返回值

Action可以接受0個至16個傳入參數,無返回值

Predicate只能接受一個傳入參數,返回值為bool類型

總結

以上是生活随笔為你收集整理的c# 带返回值的action_C#委托的介绍(delegate、Action、Func、predicate)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 深夜老司机福利 | 内射国产内射夫妻免费频道 | 日本高清黄色电影 | 蜜桃臀aⅴ精品一区二区三区 | 99久久久无码国产精品性色戒 | 香蕉视频传媒 | 欧美激情在线播放 | 欧美日韩中文国产 | 免费播放毛片精品视频 | 国产成人综合在线观看 | 综合久久综合 | 91丨九色丨海角社区 | 亚洲va国产天堂va久久 en | www.成人av.com | 国产婷婷在线视频 | 精品国产99久久久久久 | 成人1区2区3区 | 小毛片| 亚洲综合在线第一页 | 国产毛片电影 | 国产亚洲精品精品国产亚洲综合 | 婷婷色婷婷开心五月四房播播 | 国产tv在线观看 | 中文字幕3 | 国产青青草在线 | 黄色h视频 | 91中文在线 | 美女视频久久 | 亚洲一区二区三区高清视频 | 第一页综合 | 99久久婷婷国产综合精品 | 国产嫩草在线观看 | 男人天堂欧美 | 久久影院午夜 | 亚洲综合视频在线播放 | 在线观看国产精品入口男同 | 国产精品资源在线观看 | 国产小视频网址 | 国内一区二区 | 久久精品99国产 | 在线观看中文字幕一区 | 天堂中文字幕av | 草色噜噜噜av在线观看香蕉 | 久久片 | 亚洲经典一区二区三区 | 亚洲美女一区 | 一级大片视频 | 亚洲第一成肉网 | 亚洲黄色一级 | 免费看国产曰批40分钟 | 玖玖在线免费视频 | 久久久久人妻一区精品色 | 久久久久亚洲精品国产 | 亚洲综合视频在线播放 | 日韩高清一级片 | 一级片亚洲 | 神马影院午夜伦理 | 欧美与黑人午夜性猛交久久久 | 777精品视频 | 扒丝袜| 国产a级免费视频 | 国产欧美精品在线观看 | 国产一区导航 | 亚洲av永久一区二区三区蜜桃 | 国产精品日韩在线观看 | 欧美色综合 | 欧美一区二区三区国产 | 欧美日韩精品亚洲精品 | 两性免费视频 | 芒果视频污污 | 91亚洲国产| 97视频资源 | 老湿福利影院 | 欧美日韩一区二区三区四区五区六区 | 天天射网站 | 精品久久久久亚洲 | www,av在线| 中文字幕av一区二区三区 | 亚洲国产综合久久 | 国产高潮av| 成人毛片在线视频 | 裸体一区二区 | 涩久久| 深夜福利免费在线观看 | 欧美成人日韩 | 少妇无码一区二区三区 | 人妻天天爽夜夜爽一区二区三区 | 亚洲精品aa | 亚洲欧洲一区二区三区 | 91国产一区二区 | 一区二区三区四区影院 | av网站国产 | 久久综合成人 | 欧美熟妇精品久久久久久 | 天天操天天弄 | 亚洲a视频 | 人人插人人搞 | 午夜久久久久久久久久影院 | 欧美极品jizzhd欧美仙踪林 |