委托----Func和Action

网友投稿 567 2022-10-06

委托----Func和Action

委托----Func和Action

private delegate string

string说明适用于这个委托的方法的返回类型是string类型,委托名Say后面没有参数,说明对应的方法也就没有传入参数。

写一个适用于该委托的方法:

public static string SayHello() { return "Hello"; }

最后调用:

static void Main(string[] args) { Say say = SayHello; Console.WriteLine(say()); }

答案是肯定的,我们可以用Func.

Func是.NET里面的内置委托,它有很多重载。

Func:没有传入参数,返回类型为TResult的委托。就像我们上面的Say委托,就可以用Func来替代,调用如下:

static void Main(string[] args) { Func say = SayHello; //Say say = SayHello; Console.WriteLine(say()); }

看一下Func别的重载。

Func 委托:有一个传入参数T,返回类型为TResult的委托。如:

//委托 传入参数类型为string,方法返回类型为int Func a = Count;

//对应方法 public int Count(string num) { return Convert.ToInt32(num); }

Func 委托:有两个传入参数:T1与T2,返回类型为TResult。

类似的还有Func(T1, T2, T3, TResult) 委托、Func(T1, T2, T3, T4, TResult) 委托等。用法差不多,都是前面为方法的传入参数,最后一个为方法的返回类型。

Func也可以与匿名方法一起使用如:

public static void Main() { Func extractMeth = delegate(string s, int i) { char[] delimiters = new char[] { ' ' }; return i > 0 ? s.Split(delimiters, i) : s.Split(delimiters); }; string title = "The Scarlet Letter"; // Use Func instance to call ExtractWords method and display result foreach (string word in extractMeth(title, 5)) Console.WriteLine(word); }

同样它也可以接 lambda 表达式:

public static void Main() { char[] separators = new char[] {' '}; Func extract = (s, i) => i > 0 ? s.Split(separators, i) : s.Split(separators) ; string title = "The Scarlet Letter"; // Use Func instance to call ExtractWords method and display result foreach (string word in extract(title, 5)) Console.WriteLine(word); }

Func都是有返回类型的,如果我们的方法没有返回类型该怎么办呢?

Action 委托:没有传入参数,也没有返回类型,即Void。如:

tatic void Main(string[] args) { Action say = SayHello; say(); } public static void SayHello( ) { Console.WriteLine("Say Hello"); }

Action 委托:传入参数为T,没有返回类型。如:

static void Main(string[] args) { Action say = SayHello; say("Hello"); } public static void SayHello(string word ) { Console.WriteLine(word); }

Action 委托:两个传入参数,分别为T1与T2,没有返回类型。

Action同样的还有许多其它重载,每个重载用法一样,只是方法的传入参数数量不一样。

其实Action与Func的用法差不多,差别只是一个有返回类型,一个没有返回类型,当然Action也可以接匿名方法和Lambda表达式。

匿名方法:

static void Main(string[] args) { Action say = delegate(string word) { Console.WriteLine(word); }; say("Hello Word"); }

Lambda表达式:

static void Main(string[] args) { Action say = s => Console.WriteLine(s); say("Hello Word"); }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序中用WebStorm使用LESS的方法(webstorm运行微信小程序)
下一篇:使用OpenCV实现一个文档自动扫描仪
相关文章

 发表评论

暂时没有评论,来抢沙发吧~