2010-12-11 7 views
0

이벤트를 사용하는 C# 코드를 작성 중이고 Resharper가 이벤트 호출자를 만들지 묻습니다. 그것은 다음과 같은 코드 생성 :이벤트 호출자의 목적은 무엇입니까?

 LowFuel handler = lowFuel; 
     if (handler != null) handler(); 

어쩌면 내가 놓친 거지 뭔가 또는 약간 녹슨하지만 이벤트 invocator은 무엇인가? 이벤트의 실제 로직이 어디에서 처리되는지 핸들러에 대해 알고 있습니다.

감사

답변

0

이벤트 invocator (끔찍한 용어는) 단순히 이벤트를 호출하는 코드입니다.

코드 예제에서는 100 % 명확하지 않지만 일반적으로 LowFuel은 인터페이스 (아마도 인터페이스에서)와 별도로 선언하므로 호출하기 전에 코드가 있는지 확인해야합니다.

3

이름에서 알 수 있듯이 이벤트를 발생시키는 데 사용되는 방법입니다. 대개 직접 위임을 호출하는 것보다 낫습니다. 핸들러를 호출하기 전에 처리기가 null인지 여부를 확인하기 때문에 여러 가지 이유가 있습니다. 따라서 이벤트를 호출 할 때마다 확인하지 않아도됩니다.

또한 기본적으로 Resharper는 이벤트 호출자를 public 및 non virtual로 만듭니다. IMHO 공개하지 말아야합니다. 일반적으로 선언하는 클래스 외부에서 이벤트를 호출하는 것은 의미가 없습니다. 또한이 메소드를 가상으로 만드는 것이 유용 할 수 있으므로 기본 클래스의 이벤트에 가입하지 않고 파생 클래스에서 재정의 할 수 있습니다. 나는 항상 이벤트 호출자를 다음과 같이 선언한다 :

protected virtual void OnFoo(FooEventArgs args) 
{ 
    var handler = Foo; 
    if (handler != null) 
     handler(this, args); 
} 
관련 문제