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 ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.