7.5.8 Base access
A base-access consists of the reserved word
base followed by either a "
." token and an identifier or an expression-list enclosed in square brackets:
- base . identifier
base [ expression-list ]
A base-access is used to access base class members that are hidden by similarly named members in the current class or struct. A base-access is permitted only in the block of an instance constructor, an instance method, or an instance accessor. When
base.I occurs in a class or struct,
I must denote a member of the base class of that class or struct. Likewise, when
base[E] occurs in a class, an applicable indexer must exist in the base class.
At compile-time, base-access expressions of the form
base[E] are evaluated exactly as if they were written
B is the base class of the class or struct in which the construct occurs. Thus,
base[E] correspond to
this is viewed as an instance of the base class.
When a base-access references a virtual function member (a method, property, or indexer), the determination of which function member to invoke at run-time (Section 7.4.3) is changed. The function member that is invoked is determined by finding the most derived implementation (Section 10.5.3) of the function member with respect to
B (instead of with respect to the run-time type of
this, as would be usual in a non-base access). Thus, within an
override of a
virtual function member, a base-access can be used to invoke the inherited implementation of the function member. If the function member referenced by a base-access is abstract, a compile-time error occurs.