In a member access of the form E.I
, if E
is a single identifier, and if the meaning of E
as a simple-name (§7.5.2) is a constant, field, property, local variable, or parameter with the same type as the meaning of E
as a type-name (§3.6), then both possible meanings of E
are permitted. The two possible meanings of E.I
are never ambiguous, since I
must necessarily be a member of the type E
in both cases. In other words, the rule simply permits access to the static members of E
where an error would have otherwise occurred. For example:
struct Color { public static readonly Color White = new Color(...); public static readonly Color Black = new Color(...); public Color Complement() {...} } class A { public Color Color; // Field Color of type Color void F() { Color = Color.Black; // References Color.Black static member Color = Color.Complement(); // Invokes Complement() on Color field } static void G() { Color c = Color.White; // References Color.White static member } }
Within the A
class, those occurrences of the Color
identifier that reference the Color
type are underlined, and those that reference the Color
field are not underlined.