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<T1, T2, T3, T4>-Delegat

 

Veröffentlicht: Oktober 2016

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

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

public delegate void Action<in T1, in T2, in T3, in T4>(
	T1 arg1,
	T2 arg2,
	T3 arg3,
	T4 arg4
)

Parameter

arg1
Type: T1

Der erste Parameter der Methode, die dieser Delegat kapselt.

arg2
Type: T2

Der zweite Parameter der Methode, die dieser Delegat kapselt.

arg3
Type: T3

Der dritte Parameter der Methode, die dieser Delegat kapselt.

arg4
Type: T4

Der vierte Parameter der Methode, die dieser Delegat kapselt.

Typparameter

inT1

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

inT2

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

inT3

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

inT4

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

Sie können die Action<T1, T2, T3, T4> 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 müssen vier Parameter, die alle an ihn als Wert übergeben werden, müssen sie keinen Wert zurück. (In c# muss die Methode zurückgeben void. In Visual Basic müssen Sie von 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 vier Parameter verfügt und einen Wert zurückgibt, verwenden Sie die generische Func<T1, T2, T3, T4, TResult> stattdessen delegieren.

Bei Verwendung der Action<T1, T2, T3, T4> Delegaten, Sie müssen nicht explizit einen Delegaten definieren, die eine Methode mit vier Parametern kapselt. Der folgende Code deklariert z. B. explizit einen Delegaten, mit dem Namen StringCopy und weist einen Verweis auf die CopyStrings Methode, um eine Delegatinstanz.

using System;

delegate void StringCopy(string[] stringArray1, 
                         string[] stringArray2, 
                         int indexToStart,
                         int numberToCopy);

public class TestDelegate
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth", 
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      StringCopy copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, 
                                   int startPos, int number)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

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

using System;

public class TestAction4
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth", 
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int, int> copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, 
                                   int startPos, int number)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

Sie können auch die Action<T1, T2, T3, T4> 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;

public class TestAnonymousMethod
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth", 
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int, int> copyOperation = 
                                           delegate(string[] s1, string[] s2, 
                                           int pos, int num) 
                                { CopyStrings(s1, s2, pos, num); };  
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, 
                                   int startPos, int number)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

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

using System;

public class TestLambdaExpression
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth", 
                           "Sixth", "Seventh", "Eighth", "Ninth", "Tenth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int, int> copyOperation = (s1, s2, pos, num)
                                           => CopyStrings(s1, s2, pos, num);  
      copyOperation(ordinals, copiedOrdinals, 3, 5);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, 
                                   int startPos, int number)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= startPos + number - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

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: