Action(T1, T2) 대리자
TOC
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장

Action<T1, T2> 대리자

업데이트: 2007년 11월

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

네임스페이스:  System
어셈블리:  System.Core(System.Core.dll)

public delegate void Action<T1, T2>(
	T1 arg1,
	T2 arg2
)

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

Type 매개 변수

T1

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

T2

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

매개 변수

arg1
형식: T1
이 대리자로 캡슐화되는 메서드의 첫 번째 매개 변수입니다.
arg2
형식: T2
이 대리자로 캡슐화되는 메서드의 두 번째 매개 변수입니다.

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

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

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

Action<T1, T2> 대리자를 사용하는 경우에는 매개 변수가 두 개인 메서드를 캡슐화하는 대리자를 명시적으로 정의할 필요가 없습니다. 예를 들어 다음 코드에서는 ConcatStrings라는 대리자를 명시적으로 선언합니다. 그런 다음 두 메서드 중 하나에 대한 참조를 해당 대리자 인스턴스에 할당합니다. 메서드 중 하나는 문자열 두 개를 콘솔에 쓰고, 다른 하나는 문자열 두 개를 파일에 씁니다.

using System;
using System.IO;

delegate void ConcatStrings(string string1, string string2);

public class TestDelegate
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      ConcatStrings concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = WriteToFile;
      else
         concat = WriteToConsole;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);            
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;  
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }      
   }
}


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

using System;
using System.IO;

public class TestAction2
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = WriteToFile;
      else
         concat = WriteToConsole;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);            
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;  
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }      
   }
}


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

using System;
using System.IO;

public class TestAnonymousMethod
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = delegate(string s1, string s2) { WriteToFile(s1, s2); };
      else
         concat = delegate(string s1, string s2) { WriteToConsole(s1, s2);} ;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);            
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;  
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }      
   }
}


다음 예제와 같이 Action<T1, T2> 대리자 인스턴스에 람다 식을 할당할 수도 있습니다. 람다 식에 대한 소개는 람다 식(C# 프로그래밍 가이드)을 참조하십시오.

using System;
using System.IO;

public class TestLambdaExpression
{
   public static void Main()
   {
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      if (Environment.GetCommandLineArgs().Length > 1)
         concat = (s1, s2) => WriteToFile(s1, s2);
      else
         concat = (s1, s2) => WriteToConsole(s1, s2);

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      Console.WriteLine("{0}\n{1}", string1, string2);            
   }

   private static void WriteToFile(string string1, string string2)
   {
      StreamWriter writer = null;  
      try
      {
         writer = new StreamWriter(Environment.GetCommandLineArgs()[1], false);
         writer.WriteLine("{0}\n{1}", string1, string2);
      }
      catch
      {
         Console.WriteLine("File write operation failed...");
      }
      finally
      {
         if (writer != null) writer.Close();
      }      
   }
}


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

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

Windows Vista, Windows XP SP2, Windows Server 2003, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

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

.NET Framework

3.5에서 지원

.NET Compact Framework

3.5에서 지원

커뮤니티 추가 항목

추가
표시:
© 2016 Microsoft