Облака / Clouds
    Go to Copy.com
    Copy.com
    The bast cloud service
    Get 20 GB free!!!
    Support WebDav.
    Show more >>

    Go to Dropbox.com
    Dropbox.com
    time-tested cloud storage
    Support WebDav.
Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Компонент StatusBar
   Категория: Компоненты
  Тpансляция ошибок в BDE
   Категория: Базы данных
  Создание ярлыка на Рабочем столе
   Категория: Приложение
  Последний день месяца
   Категория: Базы данных
  Как подключить или отключить сетевой диск
   Категория: Интернет и Сети
  Как получить дату создания файла
   Категория: Файловая система
  Cколько файлов есть в определённой папке
   Категория: Файловая система
  Вывод текста на канву Canvas
   Категория: Компоненты
  Программно скрыть MainMenu
   Категория: Компоненты

Delphi - Справочник: Dynamic

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 Dynamic
Function|Procedure declaration; Dynamic;
Деректива (Unit )
Позволяет методу класса быть заменённым в производных классах
Описание:
Директива Dynamic позволяет методу класса быть отменой (замененной) так же названным методом в производном классе.

Вы можете пометить функцию или процедуру как Dynamic , когда вы хотите позволить программисту, который создает класс, основанный на вашем классе, заменить его функциональные возможности.

Например, Вы можете позволить базовому классу красить холст в белый цвет, но в производном классе позволяете рисовать на холсте изображение. Здесь, директива dynamic позволяет коду расширяться, обогащаться .

Директива dynamic может сопровождаться директивой Abstract. Это изменяет эффект директивы Dynamic . Это означает, что текущий класс не должен кодировать метод - он здесь только как метка-заполнитель, чтобы напомнить и гарантировать, что полученные классы осуществят его.
Пример кода: Осуществление абстрактных динамических методов класса

// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils; type // Определение базового класса TPolygon : // Этот класс - треугольник если 3 стороны, квадрат если 4 стороны... TPolygon = class private sideCount : Integer; // Сколько сторон? sideLength : Integer; // Какой длины каждая сторона? shapeArea : Double; // Область многоугольника protected procedure setArea; Dynamic; Abstract; // Должен быть осуществлен в дочернем property count : Integer read sideCount; property length : Integer read sideLength; property area : Double read shapeArea; constructor Create(sides, length : Integer); end; // Определение потомков треугольника и квадрата TTriangle = class(TPolygon) protected procedure setArea; override; // Замена абстрактного метода end; TSquare = class(TPolygon) protected procedure setArea; override; // Замена абстрактного метода end; // Определение класса формы используемой этим модулем TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Вложение определений формы // Создание объекта TPolygon constructor TPolygon.Create(sides, length : Integer); begin // Сохранение числа и длины сторон sideCount := sides; sideLength := length; // Установка области, используя метод setArea : // Этот запрос будет удовлетворён только подклассом setArea; end; // Выполнение родительского для треугольника абстрактного метода setArea procedure TTriangle.setArea; begin // Вычисление и сохранение площади треугольника shapeArea := (sideLength * sideLength) / 2; end; // Выполнение родительского для квадрата абстрактного метода setArea procedure TSquare.setArea; begin // Вычисление и сохранение площади квадрата shapeArea := sideLength * sideLength; end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); var triangle : TTriangle; square : TSquare; begin // Создание треугольника и квадрата triangle := TTriangle.Create(3, 10); square := TSquare.Create(4, 10); // Показ значений площади наших многоугольников : ShowMessageFmt('Площадь тругольника = %f',[triangle.area]); ShowMessageFmt('Площадь квадрата = %f',[square.area]); end; end.

Результат:
Площадь тругольника = 50.0
Площадь квадрата = 100.0
Примечание:
Dynamic семантически эквивалентна Virtual. Первый оптимизирован для памяти, последний для скорости.

  << Вернуться