Action :封装一个方法,该方法不返回值没有参数。定义如下:
public delegate void Action()
public delegate void Action<in T>( //封装一个方法,该方法没有返回值但有一个参数
T obj
)
其实Action就是一个可以有多个参数但是没有返回值的委托(Func就可以有返回值),但是这个委托是.net自己给你定义好的,可以直接用。所以在你需要用到委托时可以直接用不必要自己再去定义。下面是一个例子:
定义一个委托 ShowValue,然后用一个方法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就不用去定义委托ShowValue了,直接用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;
//Action showMethod = () => testName.DisplayToWindow(); 也可以使用匿名函数
//Action showMethod = delegate() { testName.DisplayToWindow();} ;使用lambda 表达式
showMethod();
}
}
参考:https://msdn.microsoft.com/zh-cn/library/system.action(v=vs.110).aspx
Action showMethod = delegate() { testName.DisplayToWindow();} ;