You can read a detailed explanation of the static keyword on MSDN , but I think this is best explained by this quote
As long as the class instance contains a separate copy of all the fields of the class instance, there is only one copy of each static field.
I believe that this can be routed at the addresses and memory offsets used by the compiler. From what I remember on my compilation course at school, the location of your instance variables will be stored as offsets from the first memory location where the object is stored. Since there is only one copy of the static field, this will never be a fixed offset to access the value of the static field.
As for the ambiguity of names, it can be as simple as collisions of names in something, for example, with a symbol table. However, a deeper technical review could be easily obtained.
Richard McGuire
source share