<?xml version="1.0"?>
<clause number="17.7.4" title="Virtual, sealed, override, and abstract accessors">
  <paragraph>A virtual event declaration specifies that the accessors of that event are virtual. The virtual modifier applies to both accessors of an event. </paragraph>
  <paragraph>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 <non_terminal where="17.6.2">accessor-body</non_terminal> simply consists of a semicolon. </paragraph>
  <paragraph>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. </paragraph>
  <paragraph>Abstract event declarations are only permitted in abstract classes (<hyperlink>17.1.1.1</hyperlink>). </paragraph>
  <paragraph>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. </paragraph>
  <paragraph>An overriding event declaration must specify the exact same accessibility modifiers, type, and name as the overridden event. </paragraph>
  <paragraph>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. </paragraph>
  <paragraph>It is a compile-time error for an overriding event declaration to include a new modifier. </paragraph>
  <paragraph>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 <hyperlink>17.5.3</hyperlink>, <hyperlink>17.5.4</hyperlink>, <hyperlink>17.5.5</hyperlink>, and <hyperlink>17.5.6</hyperlink> 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 <keyword>void</keyword> return type, and the same modifiers as the containing event. </paragraph>
</clause>
