Action<T1,T2,T3> Action<T1,T2,T3> Action<T1,T2,T3> Action<T1,T2,T3> Delegate

정의

매개 변수가 3개이고 값을 반환하지 않는 메서드를 캡슐화합니다.Encapsulates a method that has three parameters and does not return a value.

generic <typename T1, typename T2, typename T3>
public delegate void Action(T1 arg1, T2 arg2, T3 arg3);
public delegate void Action<in T1,in T2,in T3>(T1 arg1, T2 arg2, T3 arg3);
type Action<'T1, 'T2, 'T3> = delegate of 'T1 * 'T2 * 'T3 -> unit
Public Delegate Sub Action(Of In T1, In T2, In T3)(arg1 As T1, arg2 As T2, arg3 As T3)

형식 매개 변수

T1

이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수 형식입니다.The type of the first parameter of the method that this delegate encapsulates.

T2

이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수 형식입니다.The type of the second parameter of the method that this delegate encapsulates.

T3

이 대리자로 캡슐화되는 메서드의 세 번째 매개 변수 형식입니다.The type of the third parameter of the method that this delegate encapsulates.

매개 변수

arg1

이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수입니다.The first parameter of the method that this delegate encapsulates.

arg2

이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수입니다.The second parameter of the method that this delegate encapsulates.

arg3

이 대리자로 캡슐화되는 메서드의 세 번째 매개 변수입니다.The third parameter of the method that this delegate encapsulates.

상속
Action<T1,T2,T3>Action<T1,T2,T3>Action<T1,T2,T3>Action<T1,T2,T3>

설명

사용할 수는 Action<T1,T2,T3> 대리자를 명시적으로 사용자 지정 대리자를 선언 하지 않고 메서드를 매개 변수로 전달 합니다.You can use the Action<T1,T2,T3> delegate to pass a method as a parameter without explicitly declaring a custom delegate. 캡슐화 된 메서드에이 대리자에 의해 정의 되는 메서드 시그니처와 일치 해야 합니다.The encapsulated method must correspond to the method signature that is defined by this delegate. 즉, 캡슐화 된 메서드에 모두 값에 전달 되는 세 개의 매개 변수가 있어야 하는 값을 반환 하지 않아야 합니다.This means that the encapsulated method must have three parameters that are all passed to it by value, and it must not return a value. (C#에서는 메서드 반환 해야 void합니다.(In C#, the method must return void. Visual Basic의 경우에서 정의 되어야 합니다는 Sub...End SubIn Visual Basic, it must be defined by the SubEnd Sub 구문입니다.construct. 또한 수 무시 되는 값을 반환 하는 메서드입니다.) 일반적으로 이러한 메서드는 작업을 수행 하는 합니다.It can also be a method that returns a value that is ignored.) Typically, such a method is used to perform an operation.

참고

3 개의 매개 변수가 있으며 값을 반환 하는 메서드를 참조 하려면 제네릭 사용 Func<T1,T2,T3,TResult> 대리자를 대신 합니다.To reference a method that has three parameters and returns a value, use the generic Func<T1,T2,T3,TResult> delegate instead.

사용 하는 경우는 Action<T1,T2,T3> 대리자 필요가 없습니다를 명시적으로 세 개의 매개 변수를 사용 하 여 메서드를 캡슐화 하는 대리자를 정의 합니다.When you use the Action<T1,T2,T3> delegate, you do not have to explicitly define a delegate that encapsulates a method with three parameters. 예를 들어, 다음 코드는 라는 대리자를 명시적으로 선언 StringCopy 에 대 한 참조를 할당 합니다 CopyStrings 해당 대리자 인스턴스에 메서드.For example, the following code explicitly declares a delegate named StringCopy and assigns a reference to the CopyStrings method to its delegate instance.

using System;

delegate void StringCopy(string[] stringArray1, 
                         string[] stringArray2, 
                         int indexToStart);
                         
public class TestDelegate
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      StringCopy copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      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 <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }

}
Delegate Sub StringCopy(stringArray1() As String, _
                        stringArray2() As String, _
                        indexToStart As Integer)

Module TestDelegate
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As StringCopy = AddressOf CopyStrings
      copyOperation(ordinals, copiedOrdinals, 3)
      For Each ordinal As String In copiedOrdinals
         Console.WriteLine(ordinal)
      Next    
   End Sub
   
   Private Sub CopyStrings(source() As String, target() As String, startPos As Integer)
      If source.Length <> target.Length Then 
         Throw New IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If
      For ctr As Integer = startPos to source.Length - 1
         target(ctr) = String.Copy(source(ctr))
      Next
   End Sub
End Module

다음 예제에서는 인스턴스화하여이 코드를 간소화는 Action<T1,T2,T3> 명시적으로 새 대리자를 정의 하 고 명명된 된 메서드를 할당 하는 대신 대리자입니다.The following example simplifies this code by instantiating the Action<T1,T2,T3> delegate instead of explicitly defining a new delegate and assigning a named method to it.

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

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      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 <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}
Module TestAction3
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String
      Dim copyOperation As Action(Of String(), String(), Integer) = AddressOf CopyStrings
      copyOperation(ordinals, copiedOrdinals, 3)
      For Each ordinal As String In copiedOrdinals
         Console.WriteLine(ordinal)
      Next    
   End Sub
   
   Private Sub CopyStrings(source() As String, target() As String, startPos As Integer)
      If source.Length <> target.Length Then 
         Throw New IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If
      For ctr As Integer = startPos to source.Length - 1
         target(ctr) = String.Copy(source(ctr))
      Next
   End Sub
End Module

사용할 수도 있습니다는 Action<T1,T2,T3> 다음 예제와 같이 C#에서는 무명 메서드로 위임 합니다.You can also use the Action<T1,T2,T3> delegate with anonymous methods in C#, as the following example illustrates. (소개 무명 메서드를 참조 하세요 무명 메서드.)(For an introduction to anonymous methods, see Anonymous Methods.)

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

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      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 <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

람다 식을 할당할 수도 있습니다는 Action<T1,T2,T3> 다음 예제와 같이 인스턴스를 위임 합니다.You can also assign a lambda expression to an Action<T1,T2,T3> delegate instance, as the following example illustrates. (람다 식에 대 한 소개를 참조 하세요 람다 식.)(For an introduction to lambda expressions, see Lambda Expressions.)

using System;
                         
public class TestLambda
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int> copyOperation = (s1, s2, pos) =>
                                      CopyStrings(s1, s2, pos); 
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(ordinal == string.Empty ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      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 <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}
Public Module TestLambda
   Public Sub Main()
      Dim ordinals() As String = {"First", "Second", "Third", "Fourth", "Fifth"}
      Dim copiedOrdinals(ordinals.Length - 1) As String           
      Dim copyOperation As Action(Of String(), String(), Integer) = _
                           Sub(s1, s2, pos) CopyStrings(s1, s2, pos) 
      copyOperation(ordinals, copiedOrdinals, 3)
      For Each ordinal As String In copiedOrdinals
         If String.IsNullOrEmpty(ordinal) Then
            Console.WriteLine("<None>")
         Else
            Console.WriteLine(ordinal)
         End If      
      Next   
   End Sub

   Private Function CopyStrings(source() As String, target() As String, startPos As Integer) As Integer
      If source.Length <> target.Length Then 
         Throw New IndexOutOfRangeException("The source and target arrays must have the same number of elements.")
      End If
      
      For ctr As Integer = startPos To source.Length - 1 
         target(ctr) = String.Copy(source(ctr))
      Next
      Return source.Length - startPos 
   End Function
End Module
' The example displays the following output:
'       Fourth
'       Fifth

확장 메서드

GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate)

지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다.Gets an object that represents the method represented by the specified delegate.

적용 대상

추가 정보