委托 action lamda表达式 匿名委托

任何需要新建委托(new  MyDelegate(……))的地方,一般都能用匿名方法(delegate(参数){……}),也一般能用lambda表达式((参数)=>{函数体})。

以下代码显式声明了一个名为 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 委托,而不是显式定义一个新委托并将命名方法分配给该委托。


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();
   }
}

posted @ 2013-12-20 11:33  atmal  阅读(249)  评论(0编辑  收藏  举报