In the static readonly case, the containing class is allowed to modify it only
· in the variable declaration (through a variable initializer)
· in the static constructor (instance constructors, if it's not static)
static readonly is typically used if the type of the field is not allowed in a constdeclaration, or when the value is not known at compile time.
Instance readonly fields are also allowed.
Remember that for reference types, in both cases (static and instance) the readonly modifier only prevents you from assigning a new reference to the field. It specifically does not make immutable the object pointed to by the reference.
public static readonly Test test = new Test();
static void Main(string args)
test.Name = "Program";
test = new Test(); // Error: A static readonly field cannot be assigned to (except in a static constructor or a variable initializer)
public string Name;
On the other hand, if Test were a value type, then assignment to test.Name would be an error.