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 (); } } }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
문자열은 다음과 같습니다 안녕하세요