Leggere in inglese

Condividi tramite


Action Delegato

Definizione

Incapsula un metodo che non presenta parametri e non restituisce alcun valore.

C#
public delegate void Action();

Commenti

È possibile usare questo delegato per passare un metodo come parametro senza dichiarare esplicitamente un delegato personalizzato. Il metodo incapsulato deve corrispondere alla firma del metodo definita da questo delegato. Ciò significa che il metodo incapsulato non deve avere parametri e nessun valore restituito. In C#, il metodo deve restituire void. In F# la funzione o il metodo devono restituire unit. In Visual Basic, deve essere definito dal Subcostrutto ...End Sub . Può anche essere un metodo che restituisce un valore ignorato. In genere, tale metodo viene usato per eseguire un'operazione.

Nota

Per fare riferimento a un metodo senza parametri e restituisce un valore, usare invece il delegato generico Func<TResult> .

Quando si usa il Action delegato, non è necessario definire in modo esplicito un delegato che incapsula una procedura senza parametri. Ad esempio, il codice seguente dichiara in modo esplicito un delegato denominato ShowValue e assegna un riferimento al metodo dell'istanza all'istanza Name.DisplayToWindow del delegato.

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

L'esempio seguente semplifica questo codice creando un'istanza del Action delegato anziché definire in modo esplicito un nuovo delegato e assegnando un metodo denominato.

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

È anche possibile usare il delegato con metodi anonimi in C#, come illustrato nell'esempio Action seguente. Per un'introduzione ai metodi anonimi, vedere Metodi anonimi.

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

È anche possibile assegnare un'espressione lambda a un'istanza Action delegato, come illustrato nell'esempio seguente. Per un'introduzione alle espressioni lambda, vedere Espressioni lambda (C#) o Espressioni Lambda (F#).)

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

Metodi di estensione

GetMethodInfo(Delegate)

Ottiene un oggetto che rappresenta il metodo rappresentato dal delegato specificato.

Si applica a

Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Vedi anche