Leer en inglés

Compartir a través de


Action Delegado

Definición

Encapsula un método que no tiene parámetros y no devuelve un valor.

C#
public delegate void Action();

Comentarios

Puede usar este delegado para pasar un método como parámetro sin declarar explícitamente un delegado personalizado. El método encapsulado debe corresponder a la firma del método definida por este delegado. Esto significa que el método encapsulado no debe tener parámetros ni ningún valor devuelto. (En C#, el método debe devolver void. En F#, la función o el método deben devolver unit. En Visual Basic, debe definirse mediante la Subconstrucción ...End Sub . También puede ser un método que devuelve un valor que se omite). Normalmente, este método se usa para realizar una operación.

Nota

Para hacer referencia a un método que no tiene parámetros y devuelve un valor, use el delegado genérico Func<TResult> en su lugar.

Cuando se usa el Action delegado, no es necesario definir explícitamente un delegado que encapsula un procedimiento sin parámetros. Por ejemplo, el código siguiente declara explícitamente un delegado denominado ShowValue y asigna una referencia al Name.DisplayToWindow método de instancia a su instancia delegada.

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

En el ejemplo siguiente se simplifica este código mediante la creación de instancias del Action delegado en lugar de definir explícitamente un nuevo delegado y asignarle un método con nombre.

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

También puede usar el Action delegado con métodos anónimos en C#, como se muestra en el ejemplo siguiente. (Para obtener una introducción a los métodos anónimos, consulte Métodos anónimos).

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

También puede asignar una expresión lambda a una Action instancia de delegado, como se muestra en el ejemplo siguiente. (Para obtener una introducción a las expresiones lambda, vea Expresiones lambda (C#) o Expresiones 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();
   }
}

Métodos de extensión

GetMethodInfo(Delegate)

Obtiene un objeto que representa el método representado por el delegado especificado.

Se aplica a

Producto Versiones
.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
.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

Consulte también