Action 委托

来源:互联网 发布:app数据统计平台 编辑:程序博客网 时间:2024/06/06 11:38

原文链接:https://msdn.microsoft.com/zh-cn/library/system.action.aspx

封装一个方法,该方法不具有参数不返回值。当你使用Action委托,则不需要显式定义一个委托封装的无参数的过程。

1、例如,下面的代码显式声明一个名为ShowValue的委托并将分配到的引用Name.DisplayToWindow实例给其委托实例的方法。

using System;using System.Windows.Forms;public delegate void ShowValue();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");      ShowValue showMethod = testName.DisplayToWindow;      showMethod();   }}
2、下面的示例简化了此代码实例化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();   }}
3、你还可以使用Action委托与 C# 中的匿名方法,如下面的示例所示。
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();   }}
4、你还可以分配到 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();   }}