From section 13.2 of the C # 4 specification:
Note that the members in a class object are not, strictly speaking, members of any interface (§13.2). However, members in a class object are accessible by searching for an element in any type of interface (§7.4).
And section 7.4:
- First, a set of available members is defined with the name N:
- ...
- Otherwise, the set consists of all available (§3.5) members with the name N in T, including inherited members and available members with the name N in the object. [...]
And section 7.4.1:
For member search purposes, type T is considered to have the following basic types:
...
• If T is an interface type, the base types of T are the base interfaces of T and the object of the class type.
This is basically a fiction that allows the compiler to understand that object members will always be available at run time, even if they are not members of an expression type for interfaces.
source share