Is a readonly
field in C# thread safe?
public class Foo
{
private readonly int _someField;
public Foo()
{
_someField = 0;
}
publ
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.