
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Initializing a Constant Field at Runtime
|
179
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 com-
pile 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 initial-
izer to the field itself:
public readonly int bar = 100;
The second way is to initialize the readonly field through a constructor. This is dem-
onstrated through the code in the Solution to this recipe.
If you look at the following class:
public class Foo
{
public readonly int x;
public const int y = 1;
public Foo( ) {}