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<T>-Delegat

 

Veröffentlicht: Oktober 2016

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

Informationen zum Durchsuchen des .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source.

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

public delegate void Action<in T>(
	T obj
)

Parameter

obj
Type: T

Der Parameter der Methode, die dieser Delegat kapselt.

Typparameter

inT

Der Typ des Parameters der Methode, die dieser Delegat kapselt.

System_CAPS_noteHinweis

Die .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source. Sie können den Quellcode online Durchsuchen, Referenz für die Offlineanzeige herunterladen und schrittweise durchlaufen (inklusive Patches und Updates) während des Debuggens; see instructions.

Sie können die Action<T> Delegat, der 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 benötigen einen Parameter, die als Wert übergeben wird, müssen sie keinen Wert zurück. (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 einen Parameter verfügt und einen Wert zurückgibt, verwenden Sie die generische Func<T, TResult> stattdessen delegieren.

Bei Verwendung der Action<T> Delegaten, Sie müssen nicht explizit einen Delegaten definieren, die eine Methode mit einem einzelnen Parameter kapselt. Der folgende Code deklariert z. B. explizit einen Delegaten, mit dem Namen DisplayMessage und weist einen Verweis auf die WriteLine Methode oder die ShowWindowsMessage Methode, um eine Delegatinstanz.

using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

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

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Sie können auch die Action<T> 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 TestAnonMethod
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Sie können auch einen Lambda-Ausdruck zum Zuweisen einer Action<T> 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 TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s); 
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Die ForEach und ForEach<T> -Methode akzeptieren jeweils eine Action<T> -Delegaten als Parameter. Durch den Delegaten gekapselte Methode können Sie eine Aktion für jedes Element in der Matrix oder Liste ausgeführt. Im Beispiel wird die ForEach Methode veranschaulicht.

Das folgende Beispiel veranschaulicht die Verwendung von der Action<T> Delegaten zum Drucken des Inhalts von einem List<T> Objekt. In diesem Beispiel wird die Print Methode wird verwendet, um den Inhalt der Liste auf der Konsole angezeigt. Im C#-Beispiel veranschaulicht darüber hinaus auch die Verwendung der anonyme Methoden, um den Inhalt in der Konsole anzuzeigen. Beachten Sie, die im Beispiel nicht explizit deklariert eine Action<T> Variable. Stattdessen übergibt einen Verweis auf eine Methode, die einen einzelnen Parameter akzeptiert und ist einen Wert, der nicht zurückgeben, der List<T>.ForEach -Methode, deren einziger Parameter ist ein Action<T> delegieren. Auf ähnliche Weise im C#-Beispiel ein Action<T> Delegaten nicht explizit instanziiert, da die Signatur der anonymen Methode der Signatur des entspricht der Action<T> Delegat, der durch erwartet wird die List<T>.ForEach Methode.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String>();
        names.Add("Bruce");
        names.Add("Alfred");
        names.Add("Tim");
        names.Add("Richard");

        // Display the contents of the list using the Print method.
        names.ForEach(Print);

        // The following demonstrates the anonymous method feature of C#
        // to display the contents of the list to the console.
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name);
        });
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}
/* This code will produce output similar to the following:
 * Bruce
 * Alfred
 * Tim
 * Richard
 * Bruce
 * Alfred
 * Tim
 * Richard
 */

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
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: