From ECMA-335 (emphasis mine)
I.8.4.3 Static fields and static methods
Types
can
declare locations that are associated with the type rather than any particular value of
the type. Such locations are
static fields
of the type. As such, static fields declare a location that
is shared by all values of the type. Just like non-static (instance) fields, a static field is typed and
that type never changes. Static fields are always restricted to a single application domain basis
(see §
I.12.5
), but they can also be allocated on a per-thread basis.
ThreadStaticAttribute allows for static allocation on a per-thread basis.
For most usual purposes, there would only be one instance of SomeType
refrenced by foo
in your snippet.
If you involve multiple application domains, or decorate it with [ThreadStatic]
, then multiple instances could possibly exist.