C#中 --- Action 委托

来源:互联网 发布:windows 文件名 utf8 编辑:程序博客网 时间:2024/06/14 00:55

Action委托的用法,它封装一个了方法,该方法不具有参数且不返回值。

当你使用Action委托,则不需要显式定义一个委托封装的无参数的过程。

下面的代码显式声明一个名为的委托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();   }}

下面的示例简化了此代码实例化Action而不是显式定义新的委托,并向其分配指定的方法的委托。

public class testTestDelegate{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = testName.DisplayToWindow;      showMethod();   }}
你还可以使用Action委托与 C# 中的匿名方法,如下面的示例所示。
public class Anonymous{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = delegate() { testName.DisplayToWindow();} ;      showMethod();   }}

你还可以分配到 lambda 表达式Action委托实例,如下面的示例所示。

public class LambdaExpression{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = () => testName.DisplayToWindow();      showMethod();   }}

Action带参数的情况,直接看例子

使用Action<T>委托与 C# 中的匿名方法,如下面的示例所示。

using System;using System.Windows.Forms;public class TestAnonMethod{   public static void Main()   {      Action<string> messageTarget;       if (Environment.GetCommandLineArgs().Length > 1)         messageTarget = delegate(string s) { ShowWindowsMessage(s); };      else         messageTarget = delegate(string s) { Console.WriteLine(s); };      messageTarget("Hello, World!");   }   private static void ShowWindowsMessage(string message)   {      MessageBox.Show(message);         }}



lambda 表达式Action<T>委托实例,如下面的示例所示。

using System;using System.Windows.Forms;public class TestLambdaExpression{   public static void Main()   {      Action<string> messageTarget;       if (Environment.GetCommandLineArgs().Length > 1)         messageTarget = s => ShowWindowsMessage(s);       else         messageTarget = s => Console.WriteLine(s);      messageTarget("Hello, World!");   }   private static void ShowWindowsMessage(string message)   {      MessageBox.Show(message);         }}






原创粉丝点击