The difference is that the value of a static readonly field is set at run time, and can thus be modified by the containing class, whereas the value of a const field is set to a compile time constant.
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)
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.
class Program
{
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)
}
}
class Test
{
public string Name;
}
No comments:
Post a Comment