9 Classes and Interfaces

9.1 Classes

9.1.1 Syntax

class → class‑specifiers class class‑name template‑parameter‑list? inheritance‑and‑interfaces?
{ class‑content }
class‑specifiers → (access | abstract | static)*
class‑name → identifier
inheritance‑and‑interfaces → : base‑class‑or‑interface (, base‑class‑or‑interface)*
base‑class‑or‑interface → qualified‑id
class‑content → class‑member*
class‑member → static‑constructor | constructor | member‑function | member‑variable | property | indexer | class | enumerated‑type | constant | delegate | class‑delegate
static‑constructor → attributes? static extern? class‑name ( ) (compound‑statement | ;)
constructor → attributes? constructor‑specifiers class‑name parameter‑list (: initializer)? (compound‑statement | ;)
constructor‑specifiers → (access | extern)*
initializer → this ( argument‑list ) | base ( argument‑list )
member‑function → attributes? member‑function‑specifiers return‑type function‑group‑id parameter‑list (function‑body | ;)
member‑function‑specifiers → (access | abstract | extern | new | override | static | virtual )*
member‑variable → member‑variable‑specifiers type‑expr member‑variable‑name ;
member‑variable‑name → identifier
member‑variable‑specifiers → (access | static)*
property → property‑specifiers type‑expr property‑name { getter‑or‑setter+ }
property‑specifiers → (access | static)*
property‑name → identifier
getter‑or‑setter → get compound‑statement | set compound‑statement
indexer → indexer‑specifiers type‑expr this [ type‑expr indexer‑name ] { getter‑or‑setter+ }
indexer‑specifiers → (access | static)*
index‑name → identifier

9.2 Interfaces

9.2.1 Syntax

interface → interface‑specifiers interface interface‑name { interface‑content }
interface‑specifiers → access?
interface‑name → identifier
interface‑content → interface‑memfun*
interface‑memfun → return‑type identifier parameter‑list ;