Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекції для 3ОТ1.doc
Скачиваний:
10
Добавлен:
21.02.2016
Размер:
16.31 Mб
Скачать

Контрольні питання

  1. Надати поняття та характеристики модулю Variant Delphi

  2. Охарактеризувати принципи процедури обробки варіантних масивів Delphi

САМОСТІЙНА РОБОТА СТУДЕНТА

ЗМІСТОВИЙ МОДУЛЬ 4: ФАЙЛОВІ СТРУКТУРИ ДАНИХ. ДИНАМІЧНІ СТРУКТУРИ ДАНИХ

ТЕМА 4.2: ДИНАМІЧНІ СТРУКТУРИ

Самостійне заняття №24 – Типізовані константи

План заняття

  1. Поняття та характеристика типізованих констант Delphi

  2. Приклади застосування типізованих констант

ТИПИЗИРОВАННЫЕ КОНСТАНТЫ

Типизированные константы в 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;

begin    Inc(B);

   ShowMessage(IntToStr(B));

end; procedure Do;

begin    A;

   A;

   A;

end;

Результаты вывода: 1, 2, 3

В C# подобный побочный эффект отсутствует. Вообще, стандартизация C# в качествемеждународного стандарта (ECMA, 2001 год) гарантирует отсутствиепобочных эффектов. Поэтому если в программе C# необходимо сохранять некоторое состояниемежду вызовами подпрограмм (методов), используются стандартные средства, вчастности, статические или обыкновенные поля классов.

Const-параметры

В Delphi семантический смысл const-параметров заключается в указаниикомпилятору на возможность оптимизации передачи в функцию (процедуру, метод)неизменяемой ссылки на некоторый объект программы. Так, например, конструкциятипа:

procedure A(const S: string);

означает, что в качестве параметра процедуры будетпередаваться ссылка на строку (при этом копирования содержимого строки в стеквызова процедуры не происходит). Кроме того, содержимое строки S внутри процедуры изменитьнельзя.

В C# не предусмотрено прямого эквивалента const-параметров. Тем не менее, в случаенеобходимости может быть построена семантически эквивалентная конструкция(аналогия вышеприведенному примеру):

class ReadOnlyString {   ReadOnlyString(string S) { this.S = S; }   public readonly string S;   static void Test(ReadOnlyString s) { Console.Write(s.S); }   static void Main() {     string s = "проверка const-параметров";     ReadOnlyString.Test(new ReadOnlyString(s));    } }

Приведенный код иллюстрирует использованиеклассов- (т.н. wrappers) и полей.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]