2010-05-07 4 views

답변

45

정적 이벤트를 만들 수 있습니다. 클래스 내의 정적 컨텍스트에서 사용된다는 점을 제외하고는 일반 이벤트와 동일한 방식으로 사용합니다.

public class MyClass 
{ 
    public static event EventHandler MyEvent; 

    private static void RaiseEvent() 
    { 
     var handler = MyEvent; 
     if (handler != null) 
      handler(typeof(MyClass), EventArgs.Empty); 
    } 
} 

정적 이벤트에는 많은 문제가 있습니다. 정적 이벤트에 가입하면 구독 인스턴스가 근절되고 가비지 수집기가 이벤트를 수집하지 않으므로 정적 이벤트에서 개체를 구독 취소하는 데 특히주의해야합니다.

또한, 나는 내가 정적 이벤트를 만들 싶어 대부분의 경우, 내가 대신 Singleton에 표준 이벤트를 사용으로 배우는 경향이 있음을 발견했습니다. 이는 정적 이벤트와 동일한 시나리오를 처리하지만 "글로벌"레벨 인스턴스에 가입하는 것이 더 분명합니다 (IMO).

8

예. 가능합니다. 예를 들어 Application.ApplicationExit을 참조하십시오. 그러나 정적 이벤트에 연결할 때 메모리 누수에 대한 해당 페이지의 경고. 모든 정적 이벤트에 적용됩니다.

정적 클래스에 이벤트를 제공해야하거나 정적 데이터를 독점적으로 다루는 이벤트를 제공해야하는 경우에는이 방법을 사용하는 것이 좋습니다.

1

예, 이벤트를 정적으로 선언 할 수 있습니다. 당신은 그들에게 인스턴스 이벤트 인 경우에 당신이 그들을 사용하는 것과 같은 방법을 사용하지만 정적 방법 (오히려 variableName.EventName 이상 즉 ClassName.EventName)에서 이벤트 이름에 액세스 할 수 있습니다.

이제 ... 은 (는) 정적 이벤트를 원하십니까? 그것은 매우 논쟁의 여지가 있습니다. 정적으로 테스트 할 때 어려움이 생기고 가능한 한 피할 수 있어야하기 때문에 개인적으로 아니오라고 말합니다.

하지만 확실히 가능합니다.

0
public delegate void SomeEventDelegate(); 

public class SomeClass 
{ 
     public static event SomeEventDelegate SomeEvent; 
} 
관련 문제