Action 委托
定义
封装一个方法,该方法不具有参数并且不返回值。Encapsulates a method that has no parameters and does not return a value.
public delegate void Action();
public delegate void Action();
type Action = delegate of unit -> unit
Public Delegate Sub Action()
- 继承
注解
您可以使用此委托以参数的形式传递方法, 而无需显式声明自定义委托。You can use this delegate to pass a method as a parameter without explicitly declaring a custom delegate. 封装的方法必须对应于由此委托定义的方法签名。The encapsulated method must correspond to the method signature that is defined by this delegate. 这意味着封装的方法必须没有任何参数, 并且不能有返回值。This means that the encapsulated method must have no parameters and no return value. (在C#中, 该方法必须void
返回。(In C#, the method must return void
. 在 Visual Basic 中, 它必须由Sub
...End Sub
In Visual Basic, it must be defined by the Sub
…End Sub
构造.construct. 它也可以是返回忽略的值的方法。)通常, 这种方法用于执行操作。It can also be a method that returns a value that is ignored.) Typically, such a method is used to perform an operation.
备注
若要引用没有参数并返回值的方法, 请改用泛型Func<TResult>委托。To reference a method that has no parameters and returns a value, use the generic Func<TResult> delegate instead.
使用Action委托时, 无需显式定义用于封装无参数过程的委托。When you use the Action delegate, you do not have to explicitly define a delegate that encapsulates a parameterless procedure. 例如, 下面的代码显式声明一个名为ShowValue
的委托, 并将对该Name.DisplayToWindow
实例方法的引用分配给它的委托实例。For example, the following code explicitly declares a delegate named ShowValue
and assigns a reference to the Name.DisplayToWindow
instance method to its delegate instance.
using namespace System;
using namespace System::Windows::Forms;
public delegate void ShowValue();
public ref class Name
{
private:
String^ instanceName;
public:
Name(String^ name)
{
instanceName = name;
}
void DisplayToConsole()
{
Console::WriteLine(this->instanceName);
}
void DisplayToWindow()
{
MessageBox::Show(this->instanceName);
}
};
int main()
{
Name^ testName = gcnew Name(L"Koani");
ShowValue^ showMethod;
showMethod = gcnew ShowValue(testName, &Name::DisplayToWindow);
showMethod();
return 0;
}
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();
}
}
Public Delegate Sub ShowValue
Public Class Name
Private instanceName As String
Public Sub New(name As String)
Me.instanceName = name
End Sub
Public Sub DisplayToConsole()
Console.WriteLine(Me.instanceName)
End Sub
Public Sub DisplayToWindow()
MsgBox(Me.instanceName)
End Sub
End Class
Public Module testDelegate
Public Sub Main()
Dim testName As New Name("Koani")
Dim showMethod As ShowValue = AddressOf testName.DisplayToWindow
showMethod
End Sub
End Module
下面的示例通过实例化Action委托来简化此代码, 而不是显式定义一个新委托并为其分配一个命名方法。The following example simplifies this code by instantiating the Action delegate instead of explicitly defining a new delegate and assigning a named method to it.
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Windows::Forms;
public ref class Name
{
private:
String^ instanceName;
public:
Name(String^ name)
{
instanceName = name;
}
void DisplayToConsole()
{
Console::WriteLine(this->instanceName);
}
void DisplayToWindow()
{
MessageBox::Show(this->instanceName);
}
};
int main()
{
Name^ testName = gcnew Name(L"Koani");
System::Action^ showMethod;
showMethod += gcnew Action(testName, &Name::DisplayToWindow);
showMethod();
return 0;
}
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();
}
}
Public Class Name
Private instanceName As String
Public Sub New(name As String)
Me.instanceName = name
End Sub
Public Sub DisplayToConsole()
Console.WriteLine(Me.instanceName)
End Sub
Public Sub DisplayToWindow()
MsgBox(Me.instanceName)
End Sub
End Class
Public Module testDelegate
Public Sub Main()
Dim testName As New Name("Koani")
Dim showMethod As Action = AddressOf testName.DisplayToWindow
showMethod
End Sub
End Module
你还可以在中Action C#将委托与匿名方法一起使用, 如下面的示例所示。You can also use the Action delegate with anonymous methods in C#, as the following example illustrates. (有关匿名方法的介绍, 请参阅匿名方法。)(For an introduction to anonymous methods, see Anonymous Methods.)
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委托实例, 如下面的示例所示。You can also assign a lambda expression to an Action delegate instance, as the following example illustrates. (有关 lambda 表达式的介绍, 请参阅Lambda 表达式。)(For an introduction to lambda expressions, see Lambda Expressions.)
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();
}
}
Public Class Name
Private instanceName As String
Public Sub New(name As String)
Me.instanceName = name
End Sub
Public Function DisplayToConsole() As Integer
Console.WriteLine(Me.instanceName)
Return 0
End Function
Public Function DisplayToWindow() As Integer
Return MsgBox(Me.instanceName)
End Function
End Class
Module LambdaExpression
Public Sub Main()
Dim name1 As New Name("Koani")
Dim methodCall As Action = Sub() name1.DisplayToWindow()
methodCall()
End Sub
End Module
扩展方法
GetMethodInfo(Delegate) |
获取指示指定委托表示的方法的对象。Gets an object that represents the method represented by the specified delegate. |