Action Délégué
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Encapsule une méthode dépourvue de paramètre et ne retournant aucune valeur.
public delegate void Action();
public delegate void Action();
type Action = delegate of unit -> unit
Public Delegate Sub Action()
Remarques
Vous pouvez utiliser ce délégué pour passer une méthode en tant que paramètre sans déclarer explicitement de délégué personnalisé. La méthode encapsulée doit correspondre à la signature de méthode définie par ce délégué. Cela signifie que la méthode encapsulée ne doit avoir aucun paramètre et aucune valeur de retour. (En C#, la méthode doit retourner void
. En F#, la fonction ou la méthode doit retourner unit
. En Visual Basic, elle doit être définie par la Sub
construction ...End Sub
. Il peut également s’agir d’une méthode qui retourne une valeur ignorée.) En règle générale, une telle méthode est utilisée pour effectuer une opération.
Notes
Pour référencer une méthode qui n’a aucun paramètre et retourne une valeur, utilisez le délégué générique Func<TResult> à la place.
Lorsque vous utilisez le Action délégué, vous n’avez pas besoin de définir explicitement un délégué qui encapsule une procédure sans paramètre. Par exemple, le code suivant déclare explicitement un délégué nommé ShowValue
et affecte une référence à la Name.DisplayToWindow
méthode instance à son instance délégué.
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();
}
}
open System.Windows.Forms
type ShowValue = delegate of unit -> unit
type Name(name) =
member _.DisplayToConsole() =
printfn "%s" name
member _.DisplayToWindow() =
MessageBox.Show name |> ignore
let testName = Name "Koani"
let showMethod = ShowValue testName.DisplayToWindow
showMethod.Invoke()
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
L’exemple suivant simplifie ce code en instanciant le Action délégué au lieu de définir explicitement un nouveau délégué et de lui affecter une méthode nommée.
#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();
}
}
open System
open System.Windows.Forms
type Name(name) =
member _.DisplayToConsole() =
printfn "%s" name
member _.DisplayToWindow() =
MessageBox.Show name |> ignore
let testName = Name "Koani"
// unit -> unit functions and methods can be cast to Action.
let showMethod = Action testName.DisplayToWindow
showMethod.Invoke()
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
Vous pouvez également utiliser le délégué avec des Action méthodes anonymes en C#, comme l’illustre l’exemple suivant. (Pour une présentation des méthodes anonymes, consultez Méthodes anonymes.)
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();
}
}
Vous pouvez également affecter une expression lambda à un Action instance délégué, comme l’illustre l’exemple suivant. (Pour une présentation des expressions lambda, consultez Expressions lambda (C#) ou Expressions lambda (F#)).)
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();
}
}
open System
open System.Windows.Forms
type Name(name) =
member _.DisplayToConsole() =
printfn "%s" name
member _.DisplayToWindow() =
MessageBox.Show name |> ignore
let testName = Name "Koani"
let showMethod = Action(fun () -> testName.DisplayToWindow())
showMethod.Invoke()
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
Méthodes d’extension
GetMethodInfo(Delegate) |
Obtient un objet qui représente la méthode représentée par le délégué spécifié. |