Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Delegato Action

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

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public delegate void Action()

È possibile utilizzare questo delegato per passare un metodo come parametro senza dichiarare in modo esplicito un delegato personalizzato. Il metodo incapsulato deve corrispondere alla firma del metodo definita da questo delegato. In questo modo, il metodo incapsulato non deve disporre di alcun parametro e non deve restituire alcun valore. In C#, il metodo deve restituire void. In Visual Basic, deve essere definito dal costrutto SubEnd Sub. Può anche essere un metodo che restituisce un valore che viene ignorato. Questo tipo di metodo viene utilizzato in genere per eseguire un'operazione.

NotaNota

Per fare riferimento a un metodo che non dispone di parametri e restituisce un valore, utilizzare invece il delegato generico Func<TResult>.

Quando si utilizza il delegato Action, non è necessario definire in modo esplicito un delegato che incapsula una procedura senza parametri. Ad esempio, nel codice riportato di seguito viene dichiarato in modo esplicito un delegato denominato ShowValue e assegnato un riferimento al metodo dell'istanza Name.DisplayToWindow all'istanza di delegato.


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


Nell'esempio seguente questo codice viene semplificato creando un'istanza del delegato Action, invece di definire in modo esplicito un nuovo delegato assegnandogli un metodo denominato.


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


È inoltre possibile utilizzare il delegato di Action con i metodi anonimi di C#, come illustrato nell'esempio riportato di seguito. Per un'introduzione ai metodi anonimi, vedere Metodi anonimi (Guida per programmatori 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();
   }
}


È inoltre possibile assegnare un'espressione lambda a un'istanza di delegato Action, come illustrato nell'esempio riportato di seguito. Per un'introduzione alle espressioni lambda, vedere Espressioni lambda (Guida per programmatori 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();
   }
}


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft