В чем различие между константами и полями для чтения (readonly)?
Значения констант должны быть установлены к моменту компиляции. Значения полей для чтения можно устанавливать при выполнении программы в конструкторе.
Почему не компилируется следующая программа?
class Example { public static const double KOEF = 4.5; public readonly double field = 7.8; public Example(int f) { this.field = KOEF * f; } } class Program { static void Main(string[] args) { Example example = new Example(10); Console.WriteLine(example.field); Console.ReadKey(); } }
Варианты ответов:
При определении константы нельзя использовать модиифкаторы доступа, например, модификатор public
Константы с модификатором public могут располагаться только в классе, который тоже определен с модификатором public
Константа не может быть статической (то есть не может быть определена с модиифкатором static)
Значение поля для чтения может быть установлено только один раз, здесь же оно устанавливается два раза
Программа не скомпилируется, потому что константы не могут быть статическими.
Какие числа выведет на консоль следующая программа?
class Example { public const double KOEF = 4.5; public readonly double field; public Example(int f) { this.field = KOEF * f; } } class Program { static void Main(string[] args) { Example example = new Example(10); Console.WriteLine(example.field); Console.WriteLine(example.KOEF); Console.ReadKey(); } }
Программа не выведет никакие значения, так как она не будет скомпилирована. Поскольку мы не можем обращаться к константе через имя экземпляра
класса (Console.WriteLine(example.KOEF);
), к константе необходимо обращаться по имени класса: Example.KOEF
.