C# Action 委托

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

猜你喜欢

转载自blog.csdn.net/weixin_39730950/article/details/79913485