당신은 많은 대표를 구독 할 수 있습니다 :
이벤트에 가입하는 구문은 단서를 제공합니다. 두건의 밑에 .Net는 어쨌든 주문한 수집으로 이것을 유지한다.
이에 대한 표준 패턴은 다음과 같습니다
//in your class
public EventHandler<MyEvtArgs> MyEvent;
protected void OnMyEvent (MyEvtArgs args) {
if(MyEvent != null) //make sure there is at least 1 subscriber
MyEvent(this, args);
}
다음이 전화 :
당신의 OnMyEvent 보호 방법을 발광하는 클래스 안에이 모든 이벤트라고 지금
var myInstance = new MyClass();
// all of these can convert to EventHandler<MyEvtArgs> (object, MyEvtArgs)
myInstance.MyEvent += (sender, e) => { /* do something 1 */ };
myInstance.MyEvent += (sender, e) => { /* do something 2 */ };
myInstance.MyEvent += localMethod;
- 위해 .
또한이 컬렉션에서 항목을 제거 할 수 있습니다
myInstance.MyEvent -= localMethod;
참고로, null 체크를 피하기 위해 잠시 동안 내 처리기를 기본값으로 설정했습니다. 즉, public 이벤트입니다. EventHandler MyEvent = delegate {}; –
네 - 널 검사에 비해 약간의 오버 헤드가 있기 때문에 그렇게하지 않는 것이 좋습니다. 실제로 그 차이는 너무 작아서 코드에서 가장 잘 작동하는 것으로 내려갑니다. – Keith
if (MyEvent! = null) 구문을 사용하면 스레드로부터 안전하지 않으며 경쟁 조건이 발생할 수 있습니다. –