Я не уверен, что понимаю, что происходит ... в моей голове код должен быть объединен. Это правильно?
Нет. В VB.NET вы можете объединить это в одну строку. Ключевое слово Event позволяет указать полную подпись обрабатываемого типа делегата.
Однако в C # необходимо явно указать событию, какой тип делегата он будет использовать. Если это не стандартный тип делегата, вы также должны объявить делегат. Это то, что ваш конвертер делает для вас.
Как говорится, в данном случае это:
delegate void OnBeforeSavingEventHandler(TEntity Sender, CancelEventArgs EventArgs);
event OnBeforeSavingEventHandler OnBeforeSaving;
Вероятно, следует заменить на это:
event EventHandler<CancelEventArgs> OnBeforeSaving;
Это связано с тем, что в платформе есть встроенный тип EventHandler<T>
, соответствующий предлагаемому шаблону для событий, который указывает, что отправителем должен быть System.Object , а EventArgs должен быть подклассом EventArgs . Однако это не совсем то же самое, что ваш код VB.NET, поскольку вы ограничивали отправителя типом TEntity
.
Еще лучше было бы использовать встроенный CancelEventHandler type:
event CancelEventHandler OnBeforeSaving;
Это, в основном, идентично EventHandler<CancelEventArgs>
, но более ожидаемо, так как есть тип обработчика событий фреймворка специально для отмены.