Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 69
Эндрю Троелсен
Важно понимать, что значение, присвоенное константе, во
class ConstData {
// Значение, присваиваемое константе, должно быть известно во время компиляции.
public const string BestNbaTeam = "Timberwolves";
public const double SimplePI = 3.14;
public const bool Truth = true;
public const bool Falsity = !Truth;
}
Обратите внимание на то, что значения всех констант известны во время компиляции. И действительно, если просмотреть эти константы с помощью ildasm.exe, то вы обнаружите, что их значения будут "жестко" вписаны в компоновочный блок, как показано на рис. 3.8. (Ничего более постоянного получить невозможно!)
Рис. 3.8. Ключевое слово const вписывает "свое" значение прямо в метаданные компоновочного блока
Ссылки на константы
Если нужно сослаться на константу, определенную внешним типом, вы должны добавить префикс имени типа (например, ConstData.Truth), поскольку поля-константы являются
class Program {
public const string BestNhlTeam = "Wild";
static void Main(string[] args) {
// Печать значений констант, определенных другими типами.
Console.WriteLine("Константа Nba: {0}", ConstData.BestNbaTeam);
Console.WriteLine("Константа SimplePI: {0}", ConstData.SimplePI);
Console.WriteLine("Константа Truth: {0}", ConstData.Truth);
Console.WriteLine("Константа Falsity: {0}", ConstData.Falsity);
// Печать значений констант члена.
Console.WriteLine("Константа Nhl: {0}", BestNhlTeam);
// Печать значений констант локального уровня.
const int LocalFixedValue = 4;
Console.WriteLine("Константа Local: {0}", LocalFixedValue);
Console.ReadLine();
}
}
Обратите внимание на то, что для доступа к константам класса ConstData необходимо указать имя типа. Однако класс Program имеет прямой доступ к константе BestNhlTeam, поскольку она была определена в пределах собственной области видимости класса. Константа LocalFixedValue, определенная в Main(), конечно же, должна быть доступной только из метода Main().
Исходный код. Проект Constants размещен в подкаталоге, соответствующем главе 3.
Определение полей только для чтения
Как упоминалось выше, значение, присваиваемое константе, должно быть известно во время компиляции. Но что делать, если нужно создать неизменяемое поле, начальное значение которого будет известно только в