Latest web development tutorials

C #을 대리인 (위임)

C 또는 C ++ 함수 포인터와 유사한 C #을 교장 (위임).교장 (위임)를 참조 형 변수 참조하는 방법이있다.참조 런타임에 변경 될 수 있습니다.

교장 (위임)는 특별히 이벤트와 콜백 메소드를위한 것. 모든 대리인 (위임)는System.Delegate 클래스에서 파생됩니다.

문위원회 (위임)

프록시 문이 방법은 대리인에 의해 참조 될 수를 결정합니다. 위임 동일한 라벨을 갖는 방법을 가리킬 수있다.

예를 들어, 대리인이 있다고 가정합니다 :

공공 위임 INT의 MyDelegate (문자열들);

상기 수수료는 단일문자열 파라미터를취하고있는 int 형 변수를 리턴하는 방법을 참조하는 데 사용될 수있다.

다음의 구문은 위임 선언 :

대표 <리턴 유형> <대리인 이름> <매개 변수 목록>

위원회의 예 (위임)

일단 대리자 형식을 선언, 위임 객체 생성하기 위해새로운 키워드를 사용하고, 특정 방법으로해야합니다.당신은 쓰기와 같은 메소드 호출 등의새로운 문에 전달 대리자 매개 변수,하지만 인수를 만들 때.예를 들면 :

공공 대리인이 무효 printString (문자열들);
...
printString PS1 = 새로운 printString (WriteToScreen);
printString PS2 = 새로운 printString (WriteToFile);

다음 예는위원회의 성명, 인스턴스화하고 사용하는 방법을 보여줍니다, 대리인은 정수 인수 방법을 참조하는 데 사용하고 정수 값을 반환 할 수 있습니다.

시스템을 이용하여;

INT NumberChanger INT (N)를 위임;
네임 스페이스 DelegateAppl
{
   클래스 TestDelegate
   {
      정적 INT의 납입 = 10;
      공공 정적 INT ADDNUM (INT 페이지)
      {
         NUM + = 피;
         NUM을 반환;
      }

      공공 정적 INT MultNum (INT Q)
      {
         NUM * = Q;
         NUM을 반환;
      }
      공공 정적 INT getNum ()
      {
         NUM을 반환;
      }

      정적 무효 메인 (문자열 []에 인수)
      {
         // 대리자 인스턴스 NumberChanger NC1 = 새로운 NumberChanger (ADDNUM) 만들기;
         NumberChanger NC2 = 새로운 NumberChanger (MultNum);
         // 대리자 개체 NC1 (25)를 사용하여 메서드를 호출;
         Console.WriteLine ( "민의 값 : {0}", getNum ());
         NC2 (5);
         Console.WriteLine ( "민의 값 : {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

민의 값 : 35
민의 값 : 175

위탁 멀티 캐스트 (대리인의 멀티 캐스팅)

Delegate 객체는 병합 할 "+"연산자를 사용할 수 있습니다. 대리자는이 대표를 병합 병합 호출합니다. 신뢰는 같은 유형이 조합 될 수있다. "-"연산자는 결합 위임 대리인으로부터 부품을 제거하기 위해 사용될 수있다.

당신이 대리자의 목록을 만들 수 있습니다,이 유용한 기능은 의뢰를 사용하면이 호출하는 호출되는 메소드를 호출합니다. 이것은 또한 멀티캐스팅으로 알려진 위임 멀티 캐스트 (멀티 캐스트)라고합니다.다음 프로그램은 멀티 캐스트 대리자를 보여줍니다

시스템을 이용하여;

INT NumberChanger INT (N)를 위임;
네임 스페이스 DelegateAppl
{
   클래스 TestDelegate
   {
      정적 INT의 납입 = 10;
      공공 정적 INT ADDNUM (INT 페이지)
      {
         NUM + = 피;
         NUM을 반환;
      }

      공공 정적 INT MultNum (INT Q)
      {
         NUM * = Q;
         NUM을 반환;
      }
      공공 정적 INT getNum ()
      {
         NUM을 반환;
      }

      정적 무효 메인 (문자열 []에 인수)
      {
         // 대리자 인스턴스 NumberChanger의 노스 캐롤라이나 만들기;
         NumberChanger NC1 = 새로운 NumberChanger (ADDNUM);
         NumberChanger NC2 = 새로운 NumberChanger (MultNum);
         NC = NC1;
         NC + = NC2을;
         // 멀티 캐스트 NC 전화 (5);
         Console.WriteLine ( "민의 값 : {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

민의 값 : 75

교장 (위임) 사용

다음의 예는 위임의 사용을 보여줍니다. 주요printString 입력으로문자열로 방법을 참조 할 수 아무것도 반환하지 않습니다.

우리는 파일로 인쇄하는 두 가지 방법, 콘솔에 인쇄 된 첫 번째 문자열, 두 번째 문자열을 호출이 대리자를 사용 :

시스템을 이용하여;
System.IO을 사용함;

네임 스페이스 DelegateAppl
{
   클래스 PrintString
   {
      정적하여 FileStream의 FS;
      정적 StreamWriter를 자상;
      // 프록시 문 공개 위임 무효 printString (문자열들);

      // 콘솔 공공 정적 무효 WriteToScreen이 방법 인쇄 (문자열 STR)
      {
         Console.WriteLine는 ( "문자열은 다음과 같습니다 {0}", STR);
      }
      //이 방법은 인쇄 공공 정적 무효 WriteToFile을 제기 할 (문자열들)
      {
         FS = 새로운하여 FileStream ( "C : \\ message.txt"
         를 FileMode.APPEND, FileAccess.Write);
         자상 한 = 새에서는 StreamWriter (FS);
         sw.WriteLine (들);
         sw.Flush ();
         sw.Close ();
         fs.Close를 ();
      }
      //이 방법은 매개 변수로 위임 및 방법을 공공 정적 무효 sendString 전화 사용 (printString PS)
      {
         PS ( "안녕하세요");
      }
      정적 무효 메인 (문자열 []에 인수)
      {
         printString PS1 = 새로운 printString (WriteToScreen);
         printString PS2 = 새로운 printString (WriteToFile);
         sendString (PS1);
         sendString (PS2);
         Console.ReadKey ();
      }
   }
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

문자열은 다음과 같습니다 안녕하세요