Попробуйте это:
public class Microwave {
public event EventHandler<EventArgs> DoorClosed;
public event EventHandler<EventArgs> LightbulbOn;
}
Этот код использует синтаксис C # полевого события :
При компиляции полевого события
Компилятор автоматически создает хранилище
держать делегата, и создает
средства доступа к событию, которые добавляют или
удалить обработчики событий для делегата
поле.
В C # 1, 2 и 3 этот код будет компилироваться до того, что у вас есть выше. В C # 4 вы получите функционально эквивалентный код, который не использует явные блокировки . В любом случае вы можете использовать этот ярлык, не меняя потребителей этого типа.
Обновление: К сожалению, компилятор C # не позволяет вам использовать подобные событиям поля для явной реализации интерфейса. Если вы попытаетесь, вы получите эту ошибку компиляции:
Явная реализация интерфейса события должна использовать синтаксис метода доступа к событию
Обновление: Очень плохо, что для явной реализации интерфейса требуется использование синтаксиса метода доступа к событиям. Было бы круто, если бы в C # добавилась возможность создавать автоматически реализуемые события, подобные полям, например:
event EventHandler<EventArgs> IAppliance.DoorClosed { add; remove; }
Но этот синтаксис уже более устарел, чем существующий полевой синтаксис событий, и будет применим только в тех случаях, когда элемент интерфейса был явно реализован. Лучшее, что я думаю, было бы, если бы компилятор просто позволил нам сделать это:
event EventHandler<EventArgs> IAppliance.DoorClosed;