博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Func 委托 和 Action 委托 初步谈论
阅读量:5119 次
发布时间:2019-06-13

本文共 3999 字,大约阅读时间需要 13 分钟。

继上篇EventHandler之后,继续填坑,简单了解下Func<TResult> 委托 和 Action 委托.

msdn对于两者的解释:

Func<TResult>:封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。

Action:封装一个方法,该方法不具有参数并且不返回值。

 

两者的区别在于:有无返回值。

至于 Func<T,TResult>、Func<T1,T2,TResult>....

       Action<T>、Action<T1, T2>.... ,就是参数个数的区别了 。

 

借用msdn上面的例子来说明两者的使用方式:

Func<TResult>:

using System;using System.IO;public class TestDelegate{   public static void Main()   {      OutputTarget output = new OutputTarget();      Func
methodCall = output.SendToFile; if (methodCall()) Console.WriteLine("Success!"); else Console.WriteLine("File write operation failed."); }}public class OutputTarget{ public bool SendToFile() { try { string fn = Path.GetTempFileName(); StreamWriter sw = new StreamWriter(fn); sw.WriteLine("Hello, World!"); sw.Close(); return true; } catch { return false; } }}

您可以按照以下示例所演示的那样在 C# 中将 Func<TResult> 委托与匿名方法一起使用。

using System;using System.IO;public class Anonymous{   public static void Main()   {      OutputTarget output = new OutputTarget();      Func
methodCall = delegate() { return output.SendToFile(); }; if (methodCall()) Console.WriteLine("Success!"); else Console.WriteLine("File write operation failed."); }}public class OutputTarget{ public bool SendToFile() { try { string fn = Path.GetTempFileName(); StreamWriter sw = new StreamWriter(fn); sw.WriteLine("Hello, World!"); sw.Close(); return true; } catch { return false; } }}

  您也可以按照以下示例所演示的那样将 lambda 表达式分配给  委托。

using System;using System.IO;public class Anonymous{   public static void Main()   {      OutputTarget output = new OutputTarget();      Func
methodCall = () => output.SendToFile(); if (methodCall()) Console.WriteLine("Success!"); else Console.WriteLine("File write operation failed."); }}public class OutputTarget{ public bool SendToFile() { try { string fn = Path.GetTempFileName(); StreamWriter sw = new StreamWriter(fn); sw.WriteLine("Hello, World!"); sw.Close(); return true; } catch { return false; } }}

  

 

再来看 Action<> 的使用:

using System;using System.Windows.Forms;public class Name{   private string instanceName;   public Name(string name)   {      this.instanceName = name;   }   public void DisplayToConsole()   {      Console.WriteLine(this.instanceName);   }   public void DisplayToWindow()   {      MessageBox.Show(this.instanceName);   }}public class testTestDelegate{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = testName.DisplayToWindow;      showMethod();   }}

您也可以按照以下示例所演示的那样在 C# 中将 Action 委托与匿名方法一起使用。

using System;using System.Windows.Forms;public class Name{   private string instanceName;   public Name(string name)   {      this.instanceName = name;   }   public void DisplayToConsole()   {      Console.WriteLine(this.instanceName);   }   public void DisplayToWindow()   {      MessageBox.Show(this.instanceName);   }}public class Anonymous{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = delegate() { testName.DisplayToWindow();} ;      showMethod();   }}

您也可以按照以下示例所演示的那样将 lambda 表达式分配给 Action 委托实例。

using System;using System.Windows.Forms;public class Name{   private string instanceName;   public Name(string name)   {      this.instanceName = name;   }   public void DisplayToConsole()   {      Console.WriteLine(this.instanceName);   }   public void DisplayToWindow()   {      MessageBox.Show(this.instanceName);   }}public class LambdaExpression{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = () => testName.DisplayToWindow();      showMethod();   }}

 

慢慢积累,加油

 

转载于:https://www.cnblogs.com/lc-ant/p/4226191.html

你可能感兴趣的文章
Java 之 List<T> 接口的实现:ArrayList
查看>>
第二讲,NT头文件格式,以及文件头格式
查看>>
说说SPI协议
查看>>
Zookeeper简单介绍
查看>>
实验的方差分析(R语言)
查看>>
完美解决textarea字数限制
查看>>
nginx实现负载均衡
查看>>
Linux Crontab 定时任务使用总结
查看>>
java错误LoadRunner JAVA Vuser协议手工写脚本Failed to find Classes.zip entry in Classpath问题...
查看>>
【leetcode】Best Time to Buy and Sell Stock
查看>>
Linux下使用vim的tips
查看>>
在Ubuntu上使用pip安装错误 read timed out 处理方法
查看>>
SQL SERVER 内存
查看>>
奇虎360技术博客
查看>>
mysql router 自动failover测试
查看>>
systemtap 技巧系列 +GDB
查看>>
linux 系统调优2
查看>>
ASM 图解
查看>>
docker技术网址
查看>>
python基础之流程控制、数字和字符串处理
查看>>