3.14. Initializing a Constant Field at Runtime
Problem
A field marked as const can be initialized only at compile time. You need to initialize a field to a valid value at runtime, not at compile time. This field must then act as if it were a constant field for the rest of the application's life.
Solution
You have two choices when declaring a constant value in your code. You can use a readonly field or a const field. Each has its own strengths and weaknesses. However, if you need to initialize a constant field at runtime, you must use a readonly field:
public class Foo
{
public readonly int bar;
public Foo( ) {}
public Foo(int constInitValue)
{
bar = constInitValue;
}
// Rest of class...
}This is not possible using a const field. A const field can be initialized only at compile time:
public class Foo
{
public const int bar; // This line causes a compile-time error.
public Foo( ) {}
public Foo(int constInitValue)
{
bar = constInitValue; // This line also causes a compile-time error.
}
// Rest of class...
}Discussion
A readonly field allows initialization to take place only in the constructor at runtime, whereas a const field must be initialized at compile time. Therefore, implementing a readonly field is the only way to allow a field that must be constant to be initialized at runtime.
There are only two ways to initialize a readonly field. The first is by adding an initializer to the field itself:
public readonly int bar = 100;
The second way is to initialize the readonly field through ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access