Я знаю, что этот вопрос обсуждался (и отвечался) несколько раз здесь, на SO.
Также где-то здесь у меня есть следующие методы расширения, чтобы сделать этот шаблон более простым в использовании:
public static class EventHandlerExtensions
{
public static void FireEvent<T>(this EventHandler<T> handler, object sender, T args) where T : EventArgs
{
var temp = handler;
if (temp != null)
{
temp(sender, args);
}
}
public static void FireEvent(this EventHandler handler, object sender)
{
var temp = handler;
if (temp != null)
{
temp(sender, EventArgs.Empty);
}
}
}
Итак, в вашем коде вы можете сказать:
public bool IsDoorOpen
{
get { return isDoorOpen;}
private set
{
isDoorOpen = value;
DoorsChangeState.FireEvent(this);
}
}