C\#의뢰 분석(Delegate)

C\#의 의뢰(Delegate)는 C 나 C++의 함수 와 유사 한 지침 입 니 다.의뢰(Delegate)는 어떤 방법 에 대한 인용 이 있 는 인용 형식 변수 입 니 다.인용 은 실행 중 변경 할 수 있 습 니 다.
의뢰(Delegate)는 특히 이벤트 와 리 셋 방법 을 실현 하 는 데 사용 된다.모든 의뢰(Delegate)는 System.Delegate 류 에서 파생 됩 니 다.
성명 의뢰(Delegate)
위탁 성명 은 이 위탁 에서 인용 할 수 있 는 방법 을 결정 했다.의뢰 는 같은 라벨 을 가 진 방법 을 가리 킬 수 있 습 니 다.
예 를 들 어 의뢰 가 있다 고 가정 하면:

public delegate int MyDelegate (string s);
위의 의뢰 는 하나의 string 인 자 를 가 진 모든 방법 을 참조 하고 int 형식 변 수 를 되 돌려 주 는 데 사 용 됩 니 다.
설명 의뢰 의 문법 은 다음 과 같 습 니 다.

delegate <return type> <delegate-name> <parameter list>
정례 화 의뢰(Delegate)
의뢰 유형 이 밝 혀 지면 의뢰 대상 은 new 키 워드 를 사용 하여 만들어 야 하 며 특정한 방법 과 관련 이 있 습 니 다.의뢰 를 만 들 때 new 문 구 를 전달 하 는 매개 변 수 는 방법 호출 처럼 쓰 지만 매개 변 수 는 없습니다.예 를 들 면:

public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
아래 의 실례 는 의뢰 의 성명,실례 화,사용 을 보 여 줍 니 다.이 의뢰 는 정형 파 라미 터 를 가 진 방법 을 인용 하여 정형 값 을 되 돌려 줍 니 다.

using System;

delegate int NumberChanger(int n);
namespace DelegateAppl
{
  class TestDelegate
  {
   static int num = 10;
   public static int AddNum(int p)
   {
     num += p;
     return num;
   }

   public static int MultNum(int q)
   {
     num *= q;
     return num;
   }
   public static int getNum()
   {
     return num;
   }

   static void Main(string[] args)
   {
     //       
     NumberChanger nc1 = new NumberChanger(AddNum);
     NumberChanger nc2 = new NumberChanger(MultNum);
     //           
     nc1(25);
     Console.WriteLine("Value of Num: {0}", getNum());
     nc2(5);
     Console.WriteLine("Value of Num: {0}", getNum());
     Console.ReadKey();
   }
  }
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
Value of Num: 35
Value of Num: 175
의뢰 한 멀티캐스트(Multicasting of a Delegate)
의뢰 대상 은"+"연산 자 를 사용 하여 합병 할 수 있 습 니 다.합병 의뢰 가 합 쳐 진 두 개의 의뢰 를 호출 합 니 다.같은 유형의 의뢰 만 합 칠 수 있 습 니 다."-"연산 자 는 통합 의뢰 에서 구성 요소 의뢰 를 제거 하 는 데 사용 할 수 있 습 니 다.
의뢰 의 이 유용 한 특징 을 사용 하면 의뢰 가 호출 될 때 호출 할 방법의 호출 목록 을 만 들 수 있 습 니 다.이 는 의뢰 한 멀티캐스트(multicasting)라 고도 불 리 며 멀티캐스트 라 고도 부른다.다음 프로그램 은 의뢰 한 멀티캐스트 를 보 여 줍 니 다.

using System;

delegate int NumberChanger(int n);
namespace DelegateAppl
{
  class TestDelegate
  {
   static int num = 10;
   public static int AddNum(int p)
   {
     num += p;
     return num;
   }

   public static int MultNum(int q)
   {
     num *= q;
     return num;
   }
   public static int getNum()
   {
     return num;
   }

   static void Main(string[] args)
   {
     //       
     NumberChanger nc;
     NumberChanger nc1 = new NumberChanger(AddNum);
     NumberChanger nc2 = new NumberChanger(MultNum);
     nc = nc1;
     nc += nc2;
     //     
     nc(5);
     Console.WriteLine("Value of Num: {0}", getNum());
     Console.ReadKey();
   }
  }
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
Value of Num: 75
위탁(Delegate)의 용도
아래 의 실례 는 위탁 의 용법 을 보 여 주 었 다.printString 에 의뢰 하면 문자열 을 입력 하 는 방법 으로 사용 할 수 있 으 며 아무것도 되 돌려 주지 않 습 니 다.
우 리 는 이 의뢰 를 사용 하여 두 가지 방법 을 호출 합 니 다.첫 번 째 는 콘 솔 에 문자열 을 인쇄 하고 두 번 째 는 파일 에 문자열 을 인쇄 합 니 다.

using System;
using System.IO;

namespace DelegateAppl
{
  class PrintString
  {
   static FileStream fs;
   static StreamWriter sw;
   //     
   public delegate void printString(string s);

   //          
   public static void WriteToScreen(string str)
   {
     Console.WriteLine("The String is: {0}", str);
   }
   //         
   public static void WriteToFile(string s)
   {
     fs = new FileStream("c:\\message.txt", FileMode.Append, FileAccess.Write);
     sw = new StreamWriter(fs);
     sw.WriteLine(s);
     sw.Flush();
     sw.Close();
     fs.Close();
   }
   //           ,        
   public static void sendString(printString ps)
   {
     ps("Hello World");
   }
   static void Main(string[] args)
   {
     printString ps1 = new printString(WriteToScreen);
     printString ps2 = new printString(WriteToFile);
     sendString(ps1);
     sendString(ps2);
     Console.ReadKey();
   }
  }
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
The String is: Hello World
이상 은 C\#의뢰(Delegate)의 상세 한 내용 을 분석 하 는 것 입 니 다.C\#의뢰(Delegate)에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기