Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Action-Delegat

 

Veröffentlicht: Oktober 2016

Kapselt eine Methode, die über keinen Parameter verfügt und keinen Wert zurückgibt.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public delegate void Action()

Sie können dieser Delegat verwenden, um eine Methode als Parameter übergeben, ohne explizit einen benutzerdefinierten Delegaten zu deklarieren. Die gekapselte Methode muss der Methodensignatur entsprechen, die von diesem Delegaten definiert ist. Dies bedeutet, dass die gekapselte Methode keine Parameter und keinen Rückgabewert haben muss. (In c# muss die Methode zurückgeben void. In Visual Basic müssen Sie durch definiert die Sub... End Sub erstellen. Sie können auch eine Methode, die einen Wert zurückgibt, der ignoriert wird, sein.) In der Regel wird eine solche Methode zum Ausführen eines Vorgangs verwendet.

System_CAPS_noteHinweis

Um eine Methode zu verweisen, die über keine Parameter verfügt und einen Wert zurückgibt, verwenden Sie die generische Func<TResult> stattdessen delegieren.

Bei Verwendung der Action Delegaten, Sie müssen nicht explizit einen Delegaten definieren, der eine parameterlose Prozedur kapselt. Der folgende Code deklariert z. B. explizit einen Delegaten, mit dem Namen ShowValue und weist einen Verweis auf die Name.DisplayToWindow -Instanzmethode zu seiner Delegatinstanz.

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

Im folgende Beispiel wird dieser Code vereinfacht, durch die Instanziierung der Action Delegaten explizit einen neuen Delegaten definieren und eine benannte Methode zuweisen.

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

Sie können auch die Action delegieren mit anonymen Methoden in C# geschrieben, wie im folgenden Beispiel veranschaulicht. (Eine Einführung für anonyme Methoden finden Sie unter Anonyme Methoden (C#-Programmierhandbuch).)

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

Sie können auch einen Lambda-Ausdruck zum Zuweisen einer Action delegieren Instanz, wie im folgenden Beispiel veranschaulicht. (Eine Einführung in Lambda-Ausdrücke finden Sie unter Lambda-Ausdrücke (C#-Programmierhandbuch).)

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

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: