A virtual event declaration specifies that the accessors of that event are
virtual. The virtual modifier applies
to both accessors of an event.
An abstract event declaration specifies that the accessors of the event are
virtual, but does not provide an
actual implementation of the accessors. Instead, non-abstract derived
classes are required to provide their own
implementation for the accessors by overriding the event. Because an
accessor for an abstract event declaration
provides no actual implementation, its accessor-body simply consists of a
semicolon.
Chapter 17 Classes
251
An event declaration that includes both the abstract and override modifiers
specifies that the event is
abstract and overrides a base event. The accessors of such an event are
also abstract.
Abstract event declarations are only permitted in abstract classes (§17.1.1.
1).
The accessors of an inherited virtual event can be overridden in a derived
class by including an event declaration
that specifies an override modifier. This is known as an overriding event
declaration. An overriding event
declaration does not declare a new event. Instead, it simply specializes
the implementations of the accessors of an
existing virtual event.
An overriding event declaration must specify the exact same accessibility
modifiers, type, and name as the
overridden event.
An overriding event declaration may include the sealed modifier. Use of
this modifier prevents a derived class
from further overriding the event. The accessors of a sealed event are also
sealed.
It is a compile-time error for an overriding event declaration to include a
new modifier.
Except for differences in declaration and invocation syntax, virtual,
sealed, override, and abstract accessors
behave exactly like virtual, sealed, override and abstract methods.
Specifically, the rules described in §17.5.3,
§17.5.4, §17.5.5, and §17.5.6 apply as if accessors were methods of a
corresponding form. Each accessor
corresponds to a method with a single value parameter of the event type, a
void return type, and the same
modifiers as the containing event.