我有很多类似下面的代码,其中我显式地实现了接口所需的一些事件。
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# 中删除此样板文件是否有类似的更短的方法?
更新:我在示例中留下了一个非常重要的部分:即实现的事件是接口的一部分,我想显式地实现它。很抱歉之前没有提到这一点!