Is a readonly
field in C# thread safe?
public class Foo
{
private readonly int _someField;
public Foo()
{
_someField = 0;
}
publ
Not looking at your example but in general it depends what is readonly applied to, for example if dictionary is declared readonly you can still update keyvalue pairs
Yes - your code doesn't expose this
within either constructor, so no other code can "see" the object before it's been fully constructed. The .NET memory model (as of .NET 2) includes a write barrier at the end of every constructor (IIRC - search Joe Duffy's blog posts for more details) so there's no risk of another thread seeing a "stale" value, as far as I'm aware.
I'd personally still usually use a property instead, as a way of separating implementation from API, but from a thread-safety point of view it's fine.
That depends what's in the field.
Reading from a readonly field, or from any field that is smaller than the word length (including all reference types) is an atomic operation.
However, the object inside the readonly field may or may not be thread-safe.