이벤트를 null로 설정하면 모든 대상이 효과적으로 분리됩니까? 대신 수동으로 모든 이벤트를 분리해야하는모든 이벤트 처리기를 제거하는 방법은 무엇입니까?
public class Test
{
public delegate void SomethingHappenedEventHandler(Test obj);
public event SomethingHappenedEventHandler SomethingHappened;
private void OnSomethingHappened()
{
if (this.SomethingHappened != null)
this.SomethingHappened(this);
//Once this event is fired, do not allow any more invocations!
this.SomethingHappened = null;
}
}
:
public class Thing
{
priavte Test Testing { get; set; }
public Thing()
{
this.Testing = new Test();
this.Testing.SomethingHappened += DoSomething;
}
private void DoSomething(Test obj)
{
//Do some stuff.
//Detach manually.
this.Testing.SomethingHappened -= DoSomething;
}
}
[이벤트를 Null로 설정] (0120-337-305) –
이것은 거의 항상 잘못된 행동입니다. 어떤 코드가 이벤트를 구독했는지 알 수 없습니다. 2 단 발췌 부분의 문제가 아니라 가입자가 거기에서 제어됩니다. 사건을 일으키지 않으려면 단순한 일을 처리해야합니다. –
@HansPassant 개체가 이런 방식으로 이벤트를 한 번만 발사하도록 허용하는 것이 왜 안 좋을까요? –