Страницы

Поиск по вопросам

вторник, 18 июня 2019 г.

Создание экземпляра класса, независимого от других объектов

Здравствуйте. Создаю экземпляр по такой схеме:
type TExercise = object;
var TMyExercise: TExercise;
Получается что я могу не объявлять переменные на форме для создания экземпляра класса и обращаться к объекту без ссылок на форму(если бы я создал из нее). Так же это позволяет мне иметь единственный экземпляр, в котором хранятся нужные мне данные, используемые несколькими формами.
Но так создают из-за обратной совместимости, судя по справке.
Есть ли другой способ создавать независимый от других объектов класс в Borland Delphi 7?


Ответ

В Delphi обычно не принято называть переменные с большой буквой T в начале, поскольку такая буква в начале литерала обычно говорит о том, что это тип (от англ. type, например: TExercise, TObject, TStringList и т.д.). Так удобнее читать код, даже свой :)
Обычно класс объявляется, например, так:
TExercise = class(TObject) private FMyInt: Integer; FMyString: string; public property Int: Integer read FMyInt write FMyInt; property Str: string read FMyString; // только для чтения end;
Для того, чтобы создать экземпляр класса, нужно вызвать его конструктор:
MyExercise := TExercise.Create;
Когда работа с объектом окончена и он больше не нужен, обязательно нужно освободить память занимаемую объектом:
MyExercise.Free;
Иначе будут утечки памяти и она рано или поздно закончится.

Для создания "по-быстрому" независимого глобального объекта для использования на разных формах можно сделать так:
unit UnitExercise;
interface
type TExercise = class(TObject) private MyInt: Integer; MyString: string; public property Int: Integer read MyInt write MyInt; property Str: string read MyString; // только для чтения end;
var MyExercise: TExercise;
implementation
initialization MyExercise := TExercise.Create;
finalization MyExercise.Free;
end.
И добавить модуль UnitExercise в список используемых модулей (uses) в те модули, в которых предполагается использование этого объекта.
Однако, в такой конструкции есть недостаток: вы практически не контролируете порядок создания и уничтожения таких объектов (если их много, они в разных модулях и еще зависят друг от друга), что может быть актуально для больших проектов. Управлять порядком вызова секций initialization и finalization можно, меняя порядок объявления модулей в проекте и его модулях, но это очень сложная эквилибристика. Если интересно, то это тема для отдельного вопроса.

Комментариев нет:

Отправить комментарий