내보내기(0) 인쇄
모두 확장
확장 최소화
이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
번역
원본

Action<T1, T2> 대리자

업데이트: 2010년 10월

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

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

[TypeForwardedFromAttribute("System.Core, Version=2.0.5.0, Culture=Neutral, PublicKeyToken=7cec85d7bea7798e")]
public delegate void Action<in T1, in T2>(
	T1 arg1,
	T2 arg2
)

형식 매개 변수

in T1

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

이 형식 매개 변수는 반공변입니다. 즉, 지정한 형식이나 더 적게 파생되는 모든 형식을 사용할 수 있습니다. 공 분산 및 반공 분산에 대한 자세한 내용은 2678dc63-c7f9-4590-9ddc-0a4df684d42e을 참조하십시오.

in T2

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

매개 변수

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

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

참고참고:

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

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


using System;

delegate void ConcatStrings(string string1, string string2);

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outBlock)
   {
      outputBlock = outBlock;

      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      ConcatStrings concat;

      // Generate a random number and use it to determine which method is
      // assigned to the delegate;
      Random rnd = new Random();
      if (rnd.NextDouble() <= .5) 
         concat = WriteToWindow;
      else
         concat = WriteToConsole;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      outputBlock.Text += String.Format("{0}\n{1}", string1, string2) + "\n";
   }

   private static void WriteToWindow(string string1, string string2)
   {
      System.Windows.Browser.HtmlPage.Window.Alert(string.Format("{0}\n{1}", 
                                                   string1, string2));
   }
}


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


using System;

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outBlock)
   {
      outputBlock = outBlock;
      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      // Generate a random number and use it to determine which method is
      // assigned to the delegate;
      Random rnd = new Random();
      if (rnd.NextDouble() <= .5) 
         concat = WriteToWindow;
      else
         concat = WriteToConsole;

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      outputBlock.Text += String.Format("{0}\n{1}\n", string1, string2);
   }

   private static void WriteToWindow(string string1, string string2)
   {
      System.Windows.Browser.HtmlPage.Window.Alert(String.Format("{0}\n{1}\n", 
                                                   string1, string2));
   }
}


C#에서는 다음 예제와 같이 Action<T1, T2> 대리자를 무명 메서드와 함께 사용할 수도 있습니다.


using System;

public class TestAnonymousMethod
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outBlock)
   {
      outputBlock = outBlock;

      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      // Generate a random number and use it to determine which method is
      // assigned to the delegate;
      Random rnd = new Random();
      if (rnd.NextDouble() <= .5) 
         concat = delegate(string s1, string s2) { WriteToWindow(s1, s2); };
      else
         concat = delegate(string s1, string s2) { WriteToConsole(s1, s2); };

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      outputBlock.Text += String.Format("{0}\n{1}", string1, string2) + "\n";
   }

   private static void WriteToWindow(string string1, string string2)
   {
      System.Windows.Browser.HtmlPage.Window.Alert(string.Format("{0}\n{1}", 
                                                   string1, string2));
   }
}


다음 예제와 같이 Action<T1, T2> 대리자 인스턴스에 람다 식을 할당할 수도 있습니다.


using System;

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outBlock)
   {
      outputBlock = outBlock;

      string message1 = "The first line of a message.";
      string message2 = "The second line of a message.";
      Action<string, string> concat;

      // Generate a random number and use it to determine which method is
      // assigned to the delegate;
      Random rnd = new Random();
      if (rnd.NextDouble() <= .5) 
         concat = (s1, s2) => WriteToWindow(s1, s2);
      else
         concat = (s1, s2) => WriteToConsole(s1, s2);

      concat(message1, message2);
   }

   private static void WriteToConsole(string string1, string string2)
   {
      outputBlock.Text += String.Format("{0}\n{1}", string1, string2) + "\n";
   }

   private static void WriteToWindow(string string1, string string2)
   {
      System.Windows.Browser.HtmlPage.Window.Alert(string.Format("{0}\n{1}", 
                                                   string1, string2));
   }
}


Silverlight

5, 4, 3에서 지원

Windows Phone용 Silverlight

Windows Phone OS 7.1, Windows Phone OS 7.0에서 지원

XNA Framework

Xbox 360, Windows Phone OS 7.0에서 지원

Silverlight에서 지원되는 운영 체제 및 브라우저에 대한 자세한 내용은 지원되는 운영 체제 및 브라우저을 참조하십시오.

날짜

기록

이유

2010년 10월

Sub 키워드를 사용하도록 Visual Basic 람다 식이 수정되었습니다.

고객 의견

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft