2011-01-17 4 views

답변

8

이는 클라이언트가 이벤트를 구독 할 수 있도록 유형이 이벤트를 구현해야 함을 의미합니다.

이벤트는 속성이 가져 오기/설정 됨과 같이 메소드 쌍 (추가/제거)으로 생각하십시오. 인터페이스에 속성을 가질 수있는 것처럼 이벤트도 가질 수 있습니다. 구현은 적절한 추가/제거 메소드와 메타 데이터를 제공하여 이벤트에 연결해야합니다.

public event EventHandler EventFromInterface; 

또는 명시 적으로 추가로/방법을 제거 : C#에서이 필드 같은 이벤트를 사용하여 수행 할 수 있습니다

public event EventHandler EventFromInterface 
{ 
    add { ... } 
    remove { ... } 
} 
+0

이벤트를 발생시키는 것도 필요합니다. 발생시키지 않고 이벤트를 정의하는 것이 현명한 도움이되는 시나리오를 제공 할 수 있습니까? –

+1

관련없는 관찰 - 이벤트 (및 방법 쌍)에 관한 질문이 적어도 한 시간도 채 걸리지 않은 상황에서 적어도 3-4 개의 질문이 있었던 것은 흥미 롭습니다! – Mehrdad

+0

@ 램버트 : 나는 그들이 비 관련성과는 거리가 멀다고 생각한다. 원래 질문은 기본적으로이 것들을 만들어 냈다고 생각한다. –

0

그것은 해당 이벤트를 인상해야한다는 인터페이스를 구현하는 것을 의미한다. 인터페이스 내의 메소드 또는 속성과 거의 같습니다.

+5

"인상"은 부적절한 단어라고 생각합니다. 이벤트가 어디에서나 발생하도록 강요하는 것은 없습니다.하지만 클래스는 발신자가 구독/가입 취소에 사용할 추가/제거 구현을 제공해야합니다. –

+1

나는 까다 롭지 만 실제로 구현자가 이벤트를 정의해야한다는 것을 의미한다. (어쩌면 결코 그것을 올릴 수 없다) –

+0

@Jon Skeet, raise는 완벽한 단어이다. 왜냐하면 구현자가 이벤트를 발생시키지 않는다면 이벤트는 쓸모 없으며 자식 클래스도 아니다. 또는 공개 액세스로 인해 이벤트가 발생할 수 있습니다. –

관련 문제