System.Action 委托
方法描述
封装一个方法,该方法只有一个参数并且不返回值。
语法定义(C# System.Action 委托 的用法)
public delegate void Action( T obj )
提示和注释
可以使用 Action
注意
若要引用具有一个参数并返回值的方法,请改用泛型 Func
在使用 Action
C#
VB
复制
using System;
using System.Windows.Forms;
delegate void DisplayMessage(string message);
public class TestCustomDelegate
{
public static void Main()
{
DisplayMessage messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget = ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget("Hello, World!");
}
private static void ShowWindowsMessage(string message)
{
MessageBox.Show(message);
}
}
以下示例简化了此代码,它所用的方法是实例化 Action
C#
VB
复制
using System;
using System.Windows.Forms;
public class TestAction1
{
public static void Main()
{
Action
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget = ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget("Hello, World!");
}
private static void ShowWindowsMessage(string message)
{
MessageBox.Show(message);
}
}
您也可以按照以下示例所演示的那样在 C# 中将 Action
C#
复制
using System;
using System.Windows.Forms;
public class TestAnonMethod
{
public static void Main()
{
Action
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
C#
VB
复制
using System;
using System.Windows.Forms;
public class TestLambdaExpression
{
public static void Main()
{
Action
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);
}
}
ForEach 和 ForEach
System.Action 委托例子
同样,在 C# 示例 中,Action
using System; using System.Collections.Generic; class Program { static void Main() { Listnames = new List (); names.Add("Bruce"); names.Add("Alfred"); names.Add("Tim"); names.Add("Richard"); // Display the contents of the list using the Print method. names.ForEach(Print); // The following demonstrates the anonymous method feature of C# // to display the contents of the list to the console. names.ForEach(delegate(String name) { Console.WriteLine(name); }); } private static void Print(string s) { Console.WriteLine(s); } } /* This code will produce output similar to the following: * Bruce * Alfred * Tim * Richard * Bruce * Alfred * Tim * Richard */
继承层次结构
线程安全
版本信息
.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。