Здравствуйте. Создаю экземпляр по такой схеме:
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 можно, меняя порядок объявления модулей в проекте и его модулях, но это очень сложная эквилибристика. Если интересно, то это тема для отдельного вопроса.
Комментариев нет:
Отправить комментарий