Action<T> Action<T> Action<T> Action<T> Delegate

정의

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

generic <typename T>
public delegate void Action(T obj);
public delegate void Action<in T>(T obj);
type Action<'T> = delegate of 'T -> unit
Public Delegate Sub Action(Of In T)(obj As T)

형식 매개 변수

T

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

매개 변수

obj

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

상속
Action<T>Action<T>Action<T>Action<T>

예제

다음 예제에서는 사용 합니다 Action<T> 의 내용을 인쇄 하는 대리자를 List<T> 개체입니다.The following example demonstrates the use of the Action<T> delegate to print the contents of a List<T> object. 이 예제는 Print 메서드는 목록의 내용을 콘솔에 표시 하는 데 사용 됩니다.In this example, the Print method is used to display the contents of the list to the console. 또한 C# 예제에는 내용을 콘솔에 표시 하는 무명 메서드의 사용도 보여 줍니다.In addition, the C# example also demonstrates the use of anonymous methods to display the contents to the console. 이 예제에서는 명시적으로 선언 하지 않는 참고는 Action<T> 변수입니다.Note that the example does not explicitly declare an Action<T> variable. 그 대신, 단일 매개 변수를 사용 하는 및에 값을 반환 하지 않는 메서드에 대 한 참조를 전달 합니다 List<T>.ForEach 인 단일 매개 변수는 메서드를는 Action<T> 대리자입니다.Instead, it passes a reference to a method that takes a single parameter and that does not return a value to the List<T>.ForEach method, whose single parameter is an Action<T> delegate. 마찬가지로, 예제의 C#를 Action<T> 대리자 인스턴스화되지 않는 경우 명시적 무명 메서드의 시그니처가의 시그니처와 일치 하기 때문에 Action<T> 예상 하는 대리자는 List<T>.ForEach 메서드.Similarly, in the C# example, an Action<T> delegate is not explicitly instantiated because the signature of the anonymous method matches the signature of the Action<T> delegate that is expected by the List<T>.ForEach method.

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
 */
Imports System
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim names As New List(Of 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(AddressOf Print)
    End Sub

    Shared Sub Print(ByVal s As String)
        Console.WriteLine(s)
    End Sub
End Class

' This code will produce output similar to the following:
' Bruce
' Alfred
' Tim
' Richard

설명

사용할 수는 Action<T> 대리자를 명시적으로 사용자 지정 대리자를 선언 하지 않고 메서드를 매개 변수로 전달 합니다.You can use the Action<T> 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 one parameter that is 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.

참고

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

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

#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::Windows::Forms;

public delegate void DisplayMessage(String^ message);

public ref class TestCustomDelegate
{
public:
   static void ShowWindowsMessage(String^ message)
   {
      MessageBox::Show(message);      
   }
};

int main()
{
    DisplayMessage^ messageTarget; 
      
    if (Environment::GetCommandLineArgs()->Length > 1)
       messageTarget = gcnew DisplayMessage(&TestCustomDelegate::ShowWindowsMessage);
    else
       messageTarget = gcnew DisplayMessage(&Console::WriteLine);
    
    messageTarget(L"Hello World!");
    return 0;
}
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);      
   }
}
Delegate Sub DisplayMessage(message As String) 

Module TestCustomDelegate
   Public Sub Main
      Dim messageTarget As DisplayMessage 

      If Environment.GetCommandLineArgs().Length > 1 Then
         messageTarget = AddressOf ShowWindowsMessage
      Else
         messageTarget = AddressOf Console.WriteLine
      End If
      messageTarget("Hello, World!")
   End Sub
   
   Private Sub ShowWindowsMessage(message As String)
      MsgBox(message)
   End Sub   
End Module

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

#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::Windows::Forms;

namespace ActionExample
{
   public ref class Message
   {
   public:
      static void ShowWindowsMessage(String^ message)
      {
         MessageBox::Show(message);
      }
   };
}

int main()
{
   Action<String^>^ messageTarget;

   if (Environment::GetCommandLineArgs()->Length > 1)
      messageTarget = gcnew Action<String^>(&ActionExample::Message::ShowWindowsMessage);
   else
      messageTarget = gcnew Action<String^>(&Console::WriteLine);

   messageTarget("Hello, World!");
   return 0;
}
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);      
   }
}
Module TestAction1
   Public Sub Main
      Dim messageTarget As Action(Of String) 

      If Environment.GetCommandLineArgs().Length > 1 Then
         messageTarget = AddressOf ShowWindowsMessage
      Else
         messageTarget = AddressOf Console.WriteLine
      End If
      messageTarget("Hello, World!")
   End Sub
   
   Private Sub ShowWindowsMessage(message As String)
      MsgBox(message)
   End Sub   
End Module

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

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

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

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);      
   }
}
Imports System.Windows.Forms

Public Module TestLambdaExpression
   Public Sub Main()
      Dim messageTarget As Action(Of String) 
      
      If Environment.GetCommandLineArgs().Length > 1 Then
         messageTarget = Sub(s) ShowWindowsMessage(s) 
      Else
         messageTarget = Sub(s) ShowConsoleMessage(s)
      End If
      messageTarget("Hello, World!")
   End Sub
      
   Private Function ShowWindowsMessage(message As String) As Integer
      Return MessageBox.Show(message)      
   End Function
   
   Private Function ShowConsoleMessage(message As String) As Integer
      Console.WriteLine(message)
      Return 0
   End Function
End Module

합니다 ForEach 하 고 ForEach 메서드는 각각는 Action<T> 대리자를 매개 변수로 합니다.The ForEach and ForEach methods each take an Action<T> delegate as a parameter. 대리자에 의해 캡슐화 된 메서드를 사용 하면 배열 또는 목록에서 각 요소에서 작업을 수행할 수 있습니다.The method encapsulated by the delegate allows you to perform an action on each element in the array or list. 이 예제에서는 사용 된 ForEach 설명을 제공 하는 방법입니다.The example uses the ForEach method to provide an illustration.

적용 대상

추가 정보