3.25. 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 at runtime to a valid value, 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
When declaring a constant value in your code, there are two choices.
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 should 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