Способ работы событий на самом деле не изменился с 1,1 до 2
Хотя синтаксис выглядит как обычное агрегирование, на самом деле это не так:
dt.RowChanged += TableEventHandler;
dt.RowChanged += null;
dt.RowChanged += delegate (object sender, DataRowChangeEventArgs e) {
//anon
};
Запустит TableEventHandler
, а затем делегат - ноль только что пропущен.
Вы можете использовать null для очистки событий, но только внутри класса запуска событий:
this.MyEvent = null;
Если ничего не подписано, ваше мероприятие будет недействительным - см. Ответ сораз. Класс DataTable
будет содержать аналогичную проверку и не будет запускать событие, если нет подписчиков.
Стандартный шаблон:
//events should just about always use this pattern: object, args
public static event EventHandler<MyEventArgs> ChartJoinedRowAdded;
//inheriting classes can override this event behaviour
protected virtual OnChartJoinedRowAdded() {
if( ChartJoinedRowAdded != null )
ChartJoinedRowAdded( this, new MyEventArgs(...) );
}