확장 최소화
1명 중 0명이 도움이 되는 것으로 평가 - 이 항목 평가

Action<T> 대리자

업데이트: 2007년 11월

매개 변수가 하나이고 값을 반환하지 않는 메서드를 캡슐화합니다.

네임스페이스:  System
어셈블리:  mscorlib(mscorlib.dll)
public delegate void Action<T>(
	T obj
)

J#에서는 제네릭 API를 사용할 수 있지만 새로 선언할 수는 없습니다.
JScript에서는 제네릭 형식이나 메서드를 지원하지 않습니다.

Type 매개 변수

T

이 대리자로 캡슐화되는 메서드의 매개 변수 형식입니다.

매개 변수

obj
형식: T
이 대리자로 캡슐화되는 메서드의 매개 변수입니다.

이 대리자를 사용하면 사용자 지정 대리자를 명시적으로 선언하지 않고도 메서드를 매개 변수로 전달할 수 있습니다. 메서드는 이 대리자에 의해 정의되는 메서드 시그니처와 일치해야 합니다. 즉, 캡슐화된 메서드에는 값으로 전달되는 매개 변수 하나가 있어야 하고 값을 반환하지 않아야 합니다. C#의 경우 이 메서드는 void를 반환해야 합니다. Visual Basic의 경우에는 SubEnd Sub 구문을 사용하여 정의해야 합니다. 일반적으로 이러한 메서드는 작업을 수행하는 데 사용됩니다.

018hxwa8.alert_note(ko-kr,VS.90).gif참고:

매개 변수가 하나이고 값을 반환하는 메서드를 참조하려면 제네릭 Func<T, TResult> 대리자를 대신 사용합니다.

Action<T> 대리자를 사용하는 경우에는 매개 변수가 하나인 메서드를 캡슐화하는 대리자를 명시적으로 정의할 필요가 없습니다. 예를 들어 다음 코드에서는 DisplayMessage라는 대리자를 명시적으로 선언하고 WriteLine 메서드 또는 ShowWindowsMessage 메서드에 대한 참조를 해당 대리자 인스턴스에 할당합니다.

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


다음 예제에서는 새 대리자를 명시적으로 정의하고 명명된 메서드를 할당하는 대신 Action<T> 대리자를 인스턴스화하여 이 코드를 간소화합니다.

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


C#에서는 다음 예제와 같이 Action<T> 대리자를 무명 메서드와 함께 사용할 수도 있습니다. 무명 메서드에 대한 소개는 무명 메서드(C# 프로그래밍 가이드)를 참조하십시오.

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> 대리자 인스턴스에 람다 식을 할당할 수도 있습니다. 람다 식에 대한 소개는 람다 식(C# 프로그래밍 가이드)을 참조하십시오.

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


018hxwa8.alert_note(ko-kr,VS.90).gif참고:

Visual Basic에서는 람다 식을 통해 값이 반환되어야 합니다. 따라서 Visual Basic에서는 Action<T> 대리자를 람다 식과 함께 사용할 수 없습니다.

ForEachForEach<T> 메서드는 각각 Action<T> 대리자를 매개 변수로 사용합니다. 이 대리자를 통해 캡슐화된 메서드를 사용하면 배열 또는 목록의 각 요소에 대해 작업을 수행할 수 있습니다. 이 예제에서는 ForEach 메서드를 사용하여 이러한 방법을 보여 줍니다.

다음 예제에서는 Action<T> 대리자를 사용하여 List<T> 개체의 내용을 인쇄하는 방법을 보여 줍니다. 이 예제에서 Print 메서드는 콘솔에 목록의 내용을 표시하는 데 사용됩니다. 또한 C# 예제에서는 무명 메서드를 사용하여 콘솔에 내용을 표시하는 방법도 보여 줍니다.

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
 */


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0, 2.0에서 지원

.NET Compact Framework

3.5, 2.0에서 지원

XNA Framework

2.0, 1.0에서 지원
이 정보가 도움이 되었습니까?
(1500자 남음)

커뮤니티 추가 항목

추가
© 2013 Microsoft. All rights reserved.