Action Delegát

Definice

Zapouzdří metodu, která nemá žádné parametry a nevrací hodnotu.

public delegate void Action();

Poznámky

Tento delegát můžete použít k předání metody jako parametru bez explicitního deklarování vlastního delegáta. Zapouzdřená metoda musí odpovídat podpisu metody, který je definován tímto delegátem. To znamená, že zapouzdřená metoda nesmí mít žádné parametry a návratové hodnoty. (V jazyce C# musí metoda vrátit void. V jazyce F# musí funkce nebo metoda vracet unit. V jazyce Visual Basic musí být definován konstruktorem Sub...End Sub . Může to být také metoda, která vrací hodnotu, která je ignorována.) Taková metoda se obvykle používá k provedení operace.

Poznámka

Chcete-li odkazovat na metodu, která nemá žádné parametry a vrací hodnotu, použijte místo toho obecného Func<TResult> delegáta.

Když použijete Action delegáta, nemusíte explicitně definovat delegáta, který zapouzdřuje proceduru bez parametrů. Například následující kód explicitně deklaruje delegáta s názvem ShowValue a přiřadí odkaz na metodu Name.DisplayToWindow instance na jeho instanci delegáta.

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

Následující příklad zjednodušuje tento kód tím, že vytvoří instanci delegáta Action namísto explicitní definice nového delegáta a přiřazení pojmenované metody k němu.

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

Delegáta můžete také použít Action s anonymními metodami v jazyce C#, jak je znázorněno v následujícím příkladu. (Úvod k anonymním metodám najdete v tématu Anonymní metody.)

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

Výraz lambda můžete také přiřadit instanci delegáta Action , jak je znázorněno v následujícím příkladu. (Úvod k výrazům lambda najdete v tématu Výrazy lambda (C#) nebo Výrazy 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();
   }
}

Metody rozšíření

GetMethodInfo(Delegate)

Získá objekt, který představuje metodu reprezentovanou zadaným delegátem.

Platí pro

Produkt Verze
.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

Viz také