ТИПИЗИРОВАННЫЕ КОНСТАНТЫ
Типизированные константы в Delphi позволяют хранить не только значенияпримитивных типов, но и массивы, записи, а также указатели, включая указателина процедуры и функции:
const A: integer = 1;const B: array [1..3] of integer = (1, 2, 3);В C# константы всегда типизированы - как при использовании модификатораconst, так и readonly.
В Delphi при использовании директивы компилятора {$J+} (установлено поумолчанию) типизованные константы ведут себя как обычные переменные, которыеинициализируются одновременно с описанием, т.е. их значение может быть измененов ходе выполнения программы:
const A: integer = 1;X := A;A := 2;В C# действуют более строгие правила - если константа, то поменять еезначение невозможно. Если же используется поле , тоего содержимое может быть изменено в контексте объекта:
// класс-оберткаpublic class Const {// число-константа public readonly int A = 1;// метод изменяет значение поля A public void ChangeA(int NewValue) { A = NewValue; }}При использовании типизованных констант в качествеинициализируемых переменных в области видимости подпрограммы (метода,процедуры, функции) в Delphi наблюдается недокументированный побочный эффект - данные,записанные в локальные типизованные константы, сохраняются между вызовамиподпрограмм:
procedure A;const B: integer = 0;beginInc(B); ShowMessage(IntToStr(B));end;
procedure Do;begin
A; A; A;end;
Результаты вывода: 1, 2, 3
В C# подобный побочный эффект отсутствует. Вообще, стандартизация C# в качествемеждународного стандарта (ECMA, 2001 год) гарантирует отсутствиепобочных эффектов. Поэтому если в программе C# необходимо сохранять некоторое состояниемежду вызовами подпрограмм (методов), используются стандартные средства, вчастности, статические или обыкновенные поля классов.
Дата добавления: 2014-12-01; просмотров: 986;