次のようなコードがたくさんあり、インターフェイスに必要ないくつかのイベントを明示的に実装しています。
public class IMicrowaveNotifier {
event EventHandler<EventArgs> DoorClosed;
event EventHandler<EventArgs> LightbulbOn;
// ...
}
public class Microwave : IMicrowaveNotifier {
private EventHandler<EventArgs> _doorClosed;
event EventHandler<EventArgs> IMicrowaveNotifier.DoorClosed {
add { lock (this) _doorClosed += value; }
remove { lock (this) _doorClosed -= value; }
}
private EventHandler<EventArgs> _lightbulbOn;
event EventHandler<EventArgs> IMicrowaveNotifier.LightbulbOn {
add { lock (this) _lightbulbOn += value; }
remove { lock (this) _lightbulbOn -= value; }
}
// ...
}
これの多くが定型文であることがわかります。Rubyでは、次のようなことができます。
class Microwave
has_events :door_closed, :lightbulb_on, ...
end
C#でこのボイラープレートを削除する同様の短い方法はありますか?
更新:例から非常に重要な部分を除外しました。つまり、実装されるイベントはインターフェイスの一部であり、明示的に実装したいと思います。これについて先に言及しなかったことをお詫びします!