delegate c# 예제

다음 예제에서는 대리자 사용을 보여 줍니다. 대리자 printString은 문자열을 입력으로 사용하고 아무 것도 반환하지 않는 메서드를 참조하는 데 사용할 수 있습니다. 컴파일 타임에 할당된 두 가지 유형의 대리자를 비교하면 컴파일 오류가 발생합니다. 대리자 인스턴스가 System.Delegate 형식의 정적 인 경우 비교가 허용되지만 런타임에 false가 반환됩니다. 예: 이전 단원에서는 클래스 및 인터페이스와 같은 언어 구문에서 참조 형식을 구현하는 방법을 배웠습니다. 이러한 참조 유형을 사용하면 개체의 인스턴스를 만들고 소프트웨어 개발 목표를 달성하기 위해 특별한 방법으로 사용할 수 있습니다. 클래스를 사용하면 특성 또는 동작이 포함된 멤버를 포함하는 개체를 만들 수 있습니다. 인터페이스를 사용하면 이를 구현하는 모든 개체가 공개적으로 노출할 특성 및 동작 집합을 선언할 수 있습니다. 오늘은 대리자라는 새로운 참조 유형을 소개합니다. 대리자의 다중 캐스팅은 일반 대리자의 확장(때로는 단일 캐스트 대리자이라고도 합니다)의 확장입니다. 사용자가 한 번의 호출에서 두 개 이상의 메서드를 가리키는 데 도움이 됩니다. 마지막 샘플의 Clock 클래스는 이벤트를 발생시키는 대신 시간을 인쇄할 수 있으므로 대리자 사용 도입을 귀찮게하는 이유는 무엇입니까? publisg / 구독 관용구의 장점은 이벤트가 발생할 때 클래스의 수를 통보 할 수 있다는 것입니다. 구독 클래스는 Clock이 어떻게 작동하는지 알 필요가 없으며 시계는 이벤트에 대한 응답으로 무엇을 할지 알 필요가 없습니다.

마찬가지로 단추는 Onclick 이벤트를 게시할 수 있으며 관련없는 개체의 수에 관계없이 해당 이벤트를 구독할 수 있으며 단추를 클릭할 때 알림을 받을 수 있습니다. 대리자가 인스턴스 메서드를 래핑하도록 생성되면 대리자는 인스턴스와 메서드를 모두 참조합니다. 대리자는 래핑하는 메서드 외에 인스턴스 형식에 대한 지식이 없으므로 대리자는 대리자 서명과 일치하는 메서드가 있는 한 모든 유형의 개체를 참조할 수 있습니다. 대리자가 정적 메서드를 래핑하도록 생성되면 메서드만 참조합니다. 다음 선언을 고려하십시오: 대리자는 함수에 대한 포인터와 같습니다. 참조 형식 데이터 형식이며 메서드의 참조를 보유합니다. 모든 대리자는 System.Delegate 클래스에서 암시적으로 파생됩니다. .Net 프레임워크 설치에 대한 자세한 내용은 여기를 클릭하십시오. 이 문서의 예제를 다운로드합니다. 위의 예에서 PrintHelper 메서드는 Print 형식의 대리자 매개 변수를 가지고 있으며 함수:delegateFunc(numToPrint)처럼 호출합니다.