2008-11-16 5 views
1

내가 대리자를 가지고 말 :이 오류를 해결하려면 어떻게해야합니까? "MyEvent + = expected"?

public delegate void MyDelegate(); 

내가 이벤트가 있다고 :

public MyDelegate MyEvent; 

내가 오류 메시지가 수신하고있는 이벤트를 호출하는 동안 : 어떻게

"MyEvent += expected ....."

을 이 문제가 해결됩니까?

+0

이 이벤트를 호출하는 데 사용하는 코드는 무엇입니까? –

답변

4

신고 한 클래스에서만 이벤트를 호출 할 수 있습니다. 다른 곳에서는 연산자 +=-=을 통해 이벤트 대리자에서만 처리기를 추가하거나 제거 할 수 있으므로 오류 메시지가 표시됩니다.

1

에 대해이 글에서 살펴 봐야 할 수 있습니다, 당신은 이벤트 위임의 차이를 이해할 필요가있다. 이벤트는 "이벤트 올리기"가 아니라 "가입"및 "가입 취소"측면을 캡슐화합니다. (사실 IL에서 에 "이벤트 발생"을위한 멤버가 있지만 C#에서는 지원하지 않습니다.)

자세한 내용은 my article on events and delegates을 참조하십시오.

+0

VB와 심지어 C++/CLI가 수행하기 때문에 Raise 메서드를 지원하지 않는 C#이 항상 궁금해했습니다. 실제로는 매우 편리합니다. 이 결정에 대한 이유를 알고 있습니까? –

+0

제 의견으로는 캡슐화가 깨졌습니다. 수업은 사건 자체를 일으켜야 할 책임이 있습니다. 사건 패턴은 관찰적인 것입니다. 나는 "외부"에서 사건을 일으키고 싶었지만 그렇게 할 좋은 이유가 없었다. (다른 곳에서는 결코 쓸데없는 디자인이 아닌). –

4

=은 대리인 선언뿐만 아니라 이벤트와 연결됩니다. 'event'키워드가 누락되었습니다.

public **event** MyDelegate MyEvent; 

해당 키워드를 사용하면 + =가 작동합니다.

0

Chris Sells .NET Delegates: A C# Bedtime Story에서 대리인 및 이벤트에 대한 훌륭한 안내서를 확인하십시오. 유익하고 매우 재미 있습니다.

관련 문제