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