추천, 2024

에디터의 선택

C #에서 대리자와 이벤트의 차이점

이벤트 이벤트 프로그램에서 이벤트와 이벤트를 모두 사용하는 것이 중요한 역할을합니다. 위임자는 메서드를 참조 할 수 있으며 C ++의 함수 포인터와 매우 비슷합니다. 이벤트는 일부 작업이 수행되었음을 알립니다. 대리자와 이벤트의 기본적인 차이점은 대리자가 메서드에 대한 참조를 보유하고 이벤트는 대리자를 사용하여 해당 메서드에 액세스하는 방법을 제공한다는 것입니다.

비교 차트

비교의 근거대의원이벤트
기본대리자는 메서드 참조를 보유합니다.이 이벤트는 대표단에게 제공된 계층화 된 추상화입니다.
통사론delegate return_type delegate_name (parameter_list);이벤트 event_delegate event_name;
예어델리게이트는 "델리게이트"라는 키워드를 사용하여 선언됩니다.이벤트는 키워드 "이벤트"를 사용하여 선언됩니다.
선언대리자는 모든 클래스 외부에서 선언됩니다.이벤트는 클래스 내에서 선언됩니다.
호출메소드를 호출하려면 위임자에게 참조되어야합니다.메소드를 호출하려면 해당 메소드에 이벤트를 지정해야합니다.
공분산 및 반 공분산이들은 대리인에게 유연성을 제공합니다.그런 개념은 없습니다.
이벤트 접근 자그런 개념은 없습니다.이벤트 처리기 목록을 관리합니다.
의존대의원은 사건과 무관합니다.대리자가 없으면 이벤트를 만들 수 없습니다.

대표자의 정의

C #에서는 대리자가 메서드를 참조하는 함수 포인터로 사용됩니다. 특히 할당 된 메서드를 참조하는 개체입니다. 다른 메소드의 참조를 보유 할 수 있기 때문에 같은 위임자를 여러 메소드를 참조하는 데 사용할 수 있지만 한 번에 하나씩 참조 할 수 있습니다. 대리자에 의해 호출되는 메서드는 런타임에 결정됩니다. 위임을 선언하는 구문은 다음과 같습니다.

 delegate return_type delegate_name (parameter_list); 

여기서 return_type은 메서드에서 반환하는 값의 형식을 선언합니다.이 형식은 delegate에 의해 호출되며 delegate_name은 대리자의 이름입니다. parameter_list는 델리게이트가 호출 할 메소드에 필요한 매개 변수 목록을 정의합니다.

대표자에 관해 기억해야 할 몇 가지 중요한 사항이 있습니다. 시그니처와 리턴 유형과 일치하는 메소드를 호출 할 수 있습니다. 대리자는 인스턴스 메서드 또는 정적 메서드를 모두 호출 할 수 있습니다. 인스턴스 메소드를 호출하면 메소드를 호출하는 객체의 도움을 받아야합니다. 대리인은 멀티 캐스팅을 지원합니다. 즉, 대리자를 참조하는 대리인이 호출 될 때 자동으로 호출되는 메서드를 연결할 수 있습니다. 델리게이트 객체를 만들고 "+ ="연산자를 사용하여 체인에 하나씩 메소드를 할당하면됩니다. 또한 "- ="연산자를 사용하여 메소드의 체인을 풀 수 있습니다.

위임자에게 유연성을 추가하는 기능은 공분산 (Covariance) 및 반 공백 (Contravariance)입니다. 공분산과 Contravariance는 대리자에게 할당 된 메서드의 반환 형식과 서명이 대리자의 서명과 다른 조건을 허용합니다.

  • 공분성을 사용하면 메서드의 반환 형식이 대리자의 반환 형식을 지정하는 클래스에서 파생 된 클래스 인 메서드를 대리자에 지정할 수 있습니다.
  • Contravariance를 사용하면 메서드의 매개 변수 형식이 대리자의 매개 변수로 지정된 클래스의 기본 클래스 인 메서드를 대리자에 지정할 수 있습니다.

이벤트의 정의

이벤트는 수행 된 조치로 오브젝트의 상태를 변경합니다. 이벤트는 대리자를 사용하여 선언되며 이벤트를 선언 할 수없는 대리자는 존재하지 않습니다. 이벤트가 대리자에게 캡슐화를 제공한다고 말할 수 있습니다. 이벤트와 이벤트 핸들러 인 이벤트를 처리 할 때는 두 가지 중요한 요소가 있습니다. 객체가 이벤트에 관심이있는 경우 해당 특정 이벤트에 대한 이벤트 핸들러를 등록합니다. 이벤트가 시작될 때마다 등록 된 이벤트 핸들러가 호출됩니다. 사건의 선언은 다음과 같습니다 :

 이벤트 event_delegate event_name; 

여기서, "이벤트"는 이벤트의 선언을 나타내는 키워드입니다. 그런 다음 event_delegate는 이벤트를 지원하는 위임자의 이름을 표시합니다. 그런 다음 event_name은 이벤트의 이름입니다.

이벤트를 다룰 때 기억해야 할 몇 가지 중요한 사항이 있습니다. 위임자와 마찬가지로 이벤트도 멀티 캐스트 될 수 있습니다. 즉 이벤트 처리기에 연결 (등록) 된 여러 객체가 이벤트 발생시 응답합니다. 이벤트 처리기는 연산자 "+ ="를 사용하여 체인에 추가 할 수 있으며 "- ="연산자를 사용하여 체인에서 분리 할 수 ​​있습니다. 정적 및 인스턴스 메서드를 모두 이벤트 처리기로 사용할 수 있습니다. 이벤트 접근자는 이벤트 핸들러 목록의 구현을 제어 할 수 있습니다.

인터페이스에는 이벤트가 포함될 수 있습니다. 접근 자 기반 이벤트는 추상이 될 수 없지만 이벤트도 추상이 될 수 있습니다. 이 이벤트는 가상 일 수 있으며 파생 클래스에 의해 재정의 될 수 있습니다.

C #에서 대리인과 이벤트 간의 주요 차이점

  1. 대리자는 메서드 참조를 유지하는 함수 포인터로 사용되는 개체입니다. 반면에, 이벤트는 대표자에게 추상화를 제공합니다.
  2. 델리게이트를 선언하는 데 필요한 키워드는 델리게이트 인 반면, 이벤트를 선언하는 데 필요한 키워드는 이벤트 입니다.
  3. 대리자는 클래스 외부에서 선언되는 반면 이벤트는 클래스 내부에서 선언됩니다.
  4. 대리자 개체를 사용하여 메서드를 호출하려면 메서드를 대리인 개체로 참조해야합니다. 다른 한편, 이벤트 객체를 사용하여 메소드를 호출하려면 메소드가 이벤트 객체를 참조해야합니다.
  5. 공분산 및 Contravariance는 대리자 객체에 유연성을 제공합니다. 반면에, 사건에는 그런 개념이 없다.
  6. Event Accessor는 이벤트 핸들러 목록을 처리하지만 델리게이트는 그런 개념이 없습니다.
  7. 대리인은 이벤트에서 독립적이지만 대리자가 없으면 이벤트를 만들 수 없습니다.

결론:

대리자는 이벤트를 지원할 때 유용하며 런타임에 메서드를 실행할 수있는 기능을 제공합니다. 이벤트 접근자는 다중 스레드 응용 프로그램에서 이벤트 처리기를 동기화 할 수있게합니다.

Top