首页 > 代码库 > Func 委托 和 Action 委托 初步谈论
Func 委托 和 Action 委托 初步谈论
继上篇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<bool> 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<bool> 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 表达式分配给 Func<T, TResult> 委托。
using System;using System.IO;public class Anonymous{ public static void Main() { OutputTarget output = new OutputTarget(); Func<bool> 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(); }}
慢慢积累,加油
Func 委托 和 Action 委托 初步谈论
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。