대리자(C# 프로그래밍 가이드)
대리자는 메서드 서명을 정의하는 형식입니다.대리자를 인스턴스화하면 모든 메서드가 있는 인스턴스를 호환되는 시그니처에 연결할 수 있습니다.대리자 인스턴스를 통해 메서드를 호출할 수 있습니다.
대리자는 메서드를 다른 메서드에 인수로 전달하는 데 사용됩니다.이벤트 처리기는 대리자를 통해 호출되는 메서드라고 할 수 있습니다.사용자 지정 메서드를 만들면 Windows 컨트롤 같은 클래스가 특정 이벤트가 발생했을 때 해당 메서드를 호출할 수 있습니다.다음 예제에서는 대리자 선언을 보여 줍니다.
public delegate int PerformCalculation(int x, int y);
액세스 가능한 클래스 또는 구조체의 메서드 중 대리자의 시그니처(반환 형식과 매개 변수로 구성)가 일치하는 메서드는 모두 대리자에 할당할 수 있습니다.메서드는 정적 메서드이거나 인스턴스 메서드일 수 있습니다.메서드를 대리자에 할당하면 프로그래밍 방식으로 메서드 호출을 변경하고 기존 클래스에 새 코드를 삽입할 수 있습니다.대리자의 시그니처만 알고 있으면 사용자가 작성한 메서드를 할당할 수 있습니다.
[!참고]
메서드 오버로드의 컨텍스트에서는 메서드 시그니처에 반환 값이 포함되지 않지만대리자 컨텍스트에서는 시그니처에 반환 값이 포함됩니다.즉 메서드의 반환 값이 대리자의 반환 값과 같아야 합니다.
대리자에서는 이와 같이 메서드를 매개 변수로 취급할 수 있으므로 대리자는 콜백 메서드 정의에 이상적입니다.예를 들어, 두 개체를 비교하는 메서드에 대한 참조를 정렬 알고리즘에 인수로 전달할 수 있습니다.비교 코드는 별도의 절차이기 때문에 정렬 알고리즘을 보다 일반적인 방식으로 작성할 수 있습니다.
대리자 개요
대리자에는 다음과 같은 속성이 있습니다.
대리자는 C++의 함수 포인터와 유사하지만 형식이 안전합니다.
대리자를 통해 메서드를 매개 변수로 전달할 수 있습니다.
대리자를 사용하여 콜백 메서드를 정의할 수 있습니다.
여러 대리자를 연결할 수 있습니다. 예를 들어 단일 이벤트에 대해 여러 메서드를 호출할 수 있습니다.
메서드와 대리자 시그니처가 정확히 일치할 필요는 없습니다.자세한 내용은 대리자의 가변성 사용(C# 및 Visual Basic)를 참조하십시오.
C# 버전 2.0에는 별도로 정의된 메서드 대신 코드 블록을 매개 변수로 전달할 수 있도록 하는 무명 메서드라는 개념이 도입되었습니다.C# 3.0에는 인라인 코드 블록을 더 간단하게 작성할 수 있는 람다 식이 도입되었습니다.특정 컨텍스트에서는 무명 메서드와 람다 식 모두 대리자 형식으로 컴파일됩니다.이 두 기능을 익명 함수라고 합니다.람다 식에 대한 자세한 내용은 익명 함수(C# 프로그래밍 가이드)를 참조하십시오.
단원 내용
C# 언어 사양
자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.
중요 설명서 장
C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers의 Delegates, Events, and Lambda Expressions
Learning C# 3.0: Master the fundamentals of C# 3.0의 Delegates and Events