c# delegate 예제

Posted by | august 02, 2019 | Ikke-kategoriseret | No Comments

단일 캐스트 대리자의 서명은 다음과 같습니다: 대리자는 함수에 대한 포인터와 같습니다. 참조 형식 데이터 형식이며 메서드의 참조를 보유합니다. 모든 대리자는 System.Delegate 클래스에서 암시적으로 파생됩니다. 두 개의 숫자를 허용하는 메서드가 있고 숫자를 추가하고 두 숫자의 합계를 반환하려는 경우 대리자를 사용하여 아래에 표시된 코드 조각에 표시된 대로 메서드의 반환 값을 저장할 수 있습니다. 대리자는 메서드를 참조할 수 있는 C# 언어 요소입니다. C 또는 C++ 프로그래머인 경우 대리자가 기본적으로 함수 포인터이기 때문에 익숙한 것처럼 들릴 것입니다. 그러나 다른 언어를 사용한 개발자는 “메서드에 대한 참조가 필요한 이유는 무엇입니까?”라고 궁금해할 것입니다. 대답은 런타임에 원하는 모든 기능을 구현할 수 있는 최대한의 유연성을 제공하는 것으로 귀결됩니다. 다른 사이트에서 대리자를 사용하는 복잡한 이유가 있을 수 있습니다.

나는 여기에 복잡한 단락을 넣지 않을 것이다. 간단한 단어 대리자는 여러 메서드에 대한 참조를 포함하고 필요할 때 호출합니다. 따라서 필요에 따라 메서드 수를 만들고 대리자에게 연결합니다. 런타임에 이벤트가 발생되고 대리자가 함수를 동적으로 호출하고 결과를 표시합니다. 먼저 사용자 지정 이벤트를 살펴보겠습니다. 다음은 이벤트 데모 클래스의 구성원인 이벤트 선언입니다. 이벤트 키워드, 대리자 유형 및 이벤트 이름으로 선언됩니다. 멀티캐스트 대리자는 이벤트 처리에 광범위하게 사용됩니다. 이벤트 원본 개체는 해당 이벤트를 수신하도록 등록된 받는 사람 개체에 이벤트 알림을 보냅니다. 이벤트에 등록하기 위해 받는 사람은 이벤트를 처리하도록 설계된 메서드를 만들고 해당 메서드에 대한 대리자를 만들고 대리자를 이벤트 원본에 전달합니다.

소스는 이벤트가 발생할 때 대리자를 호출합니다. 그런 다음 대리자는 받는 사람에서 이벤트 처리 메서드를 호출하여 이벤트 데이터를 전달합니다. 지정된 이벤트의 대리자 유형은 이벤트 소스에 의해 정의됩니다. 자세한 내용은 이벤트를 참조하십시오. 이것이 대리자 선언입니다. 값을 반환하지 않으며 매개 변수를 사용하지 않습니다. 런타임은 여러 메서드를 실행하기 위해 내부적으로 목록(호출 목록이라고도 함)을 유지 관리합니다. 다음 코드 목록은 Combine() 메서드를 사용하여 여러 대리자 인스턴스를 결합하는 방법을 보여 주며 있습니다. 대리자의 흥미롭고 유용한 속성은 참조하는 개체의 클래스를 모르거나 신경 쓰지 않는다는 것입니다. 모든 개체는 수행할 것입니다. 중요한 것은 메서드의 인수 유형과 반환 형식이 대리자와 일치한다는 것입니다. 이렇게 하면 대리자가 “익명” 호출에 완벽하게 적합합니다.

작업 대리자의 유형에는 여러 가지가 있습니다. 예를 들어, Action delegate는 단일 매개 변수를 사용하고 값을 반환하지 않는 메서드를 캡슐화합니다. MyFunc() { 콘솔.WriteLine(“대리자에 의해 호출되었습니다…”); } public 정적 void Main() { // 인스턴스화 단순 대리자 = 새 단순 대리자 (MyFunc); // 호출 단순 Delegate(); } } clickMe 버튼을 마우스로 누르면 클릭 이벤트가 발생하여 OnClickMeClicked() 메서드가 호출됩니다. Button 클래스는 Click 이벤트를 발생시처리하며 더 이상 해야 할 일은 없습니다. 미리 정의된 이벤트와 대리자를 사용하기가 매우 쉽기 때문에 직접 만들기 전에 필요한 작업을 수행할 일부가 이미 있는지 확인하는 것이 좋습니다.