TObject, Delphi, Програмування, статті

TObject є загальним предком всіх класів в Delphi, коренем ієрархії Visual Component Library. Tobject являє собою абстрактний клас, який реалізує тільки найбільш загальні механізми, універсально колективні всіма об’єктами VCL.

TObject автоматично використовується як породжує тип при створенні нового класу Delphi. Отже, наступні фрагменти коду мають одне і те ж значення:

        type
          TNewObject = class
        end;
        type
          TNewObject = class (TObject)
        end;

Object оголошує конструктор і деструктор (спеціальні методи, які створюють і руйнують об’єкти) і реалізує інформацію про тип і методах обробки повідомлень. Оскільки TObject є абстрактним класом, більшість його методів перекривається в його нащадках в рамках VCL. Зазвичай у вас буде доступ до породженої реалізації Create, Конструктору і Free, безпечно зухвалому деструктор Destroy.

Таблиця 3-1 відображає методи общецелевие призначення, що реалізуються TObject. У загальному випадку з цих методів розробникам додатків цікаві тільки три: Create, Destroy і Free.

 

Таблиця 3-1 Методи, реалізовані Tobject










































Використовувати або встановити це … Щоб зробити це …
ClassName Отримати ім’я класу об’єкта.
ClassParent Отримати батьківський клас об’єкта.
ClassType Отримати дійсний тип об’єкту.
Create Сконструювати новий об’єкт.
DefaultHandler Дана віртуальна функція не має реалізації – на рівні T0bject вона нічого не робить.
Destroy Зруйнувати об’єкт
Free Зруйнувати об’єкт, сконструйований Create.
InheritsFroin Визначити, породжений чи об’єкт від певного класу.
InstanceSize Визначити кількість пам’яті, відведений об’єкту.

Метод ClassName






















Уражені об’єкти Всі об’єкти.
Призначення Метод ClassName повертає ім’я об’єкта або класу.
Оголошення class function ClassName: string;
Приклад синтаксису
 / / Створити (Create) форму з простою командної кнопкою.  / / Коли кнопка натискається, заголовок Form1 змінюється  / / На “TButton”
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Caption := Button1.ClassName;
end;

Опис ClassName повертає рядок, що містить назву реального типу поточного об’єкта. У наведеному прикладі Button1 має тип TButton і така назва, що повертається ClassName. Якщо ви породжує новий тип від іншого типу і потім використовуєте ClassName, Функція поверне назва нового типу. Необхідність в знанні назви класу об’єкта виникає рідко. Для визначення типу об’єкту (на відміну від назви його типу) використовуйте оператор is, Який обговорювався в розділі 2, “Основи VCL”.


 

 

Метод ClassParent

 






















Уражені об’єкти Всі об’єкти.
Призначення Метод ClassParent повертає батьківський клас об’єкта або класу.
Оголошення class function ClassParent: TClass;
Приклад синтаксису
procedure TForm1.Button1Click(Sender: TObject);
var / / Створити змінну типу TCIass
MyParent: TClass;
begin / / Спочатку присвоїти тип класу Buttoni / / Змінної MyParent
MyParent := Button1.ClassType; / / Потім використовувати ClassParent для визначення / / Батьківського класу MyParent
MyParent := MyParent.ClassParent; / / Нарешті, вивести рядок з ClassName
Form1.Caption := MyParent.ClassName;
end;

Опис ClassParent повертає безпосередній предок поточного класу. Повертаний тип ClassParent є TCIass, Який представляє собою прямого нащадка TObject і в основному є тим же, що і TObject, Оскільки не додає ніякої функціональності до базового класу. Зазвичай ClassParent використовується для визначення того, можна Чи поточний об’єкт законно привласнити іншому об’єкту. TObject.ClassParent поверне Nil з огляду на те, що оскільки TObject не має батьківського класу. Програмісту застосування чи компонентів рідко доводиться викликати ClassParent, Хоча внутрішньо ClassParent і використовується операторами is і as, І методом InheritsFrom (Описаним нижче).

Метод ClassType

 






















Уражені об’єкти Всі об’єкти.
Призначення Метод ClassType повертає тип класу об’єкта.
Оголошення function ClassType: TCIass;
Приклад синтаксису
 / / Коли натискається кнопка, заголовок  / / TForm1 змінюється на “TButton”
procedure TForm1.Button1.Click(Sender: TObject);
begin
Form1.Caption := Button1.ClassType.ClassName;
end;
Опис ClassType повертає дійсний тип об’єкта, а не просто його ім’я, як це робить ClassName. На відміну від ClassInfo,
ClassName і ClassParent, ClassType оперує об’єктами (екземплярами класу), а не класами (типами об’єктів). ClassType повертає інформацію, подібну повертається оператором is. Фактично оператори is і as самі викликають ClassType.

Метод Create

 






















Уражені об’єкти Всі об’єкти.
Призначення Метод Create є конструктором в Object Pascal.
Оголошення constructor Create;
Приклад синтаксису
 / / При створенні форми динамічно соадаег новий  / / Об’єкт і друкує в заголовку / / Форми тип класу нового об’єкта, TObject.
procedure TFonnI.FonnCreate (Sender: TObject);
var
MyObject: TObject;
begin
MyObject := TObject.Create;
Form1.Caption := MyObject.ClassType.ClassName;
end;
Опис Create застосовується для конструювання об’єкта за допомогою розподілу для нього пам’яті і ініціалізації всіх даних об’єкта Create розподіляє і ініціалізує пам’ять, необхідну конструйованих об’єктів.

Кожен клас в VCL перекриває або повторно реалізує Create тим чи іншим чином. Об’єкти, примірники яких отримані Create, повинні руйнуватися допомогою Free.

Метод Destroy


















Уражені об’єкти Всі об’єкти.
Призначення Метод Destroy використовується для руйнування об’єкта,
Оголошення destructor Destroy;
Опис Destroy є деструктором Delphi. Він використовується для руйнування об’єкта та звільнення пам’яті, яка була розподілена об’єкту. Destroy викликається методом Free, що представляє собою функцію, яку слід викликати для руйнування об’єктів, сконструйованих Create.


 

 

Метод Free

 






















Уражені об’єкти Всі об’єкти.
Призначення Метод Free використовується для руйнування об’єкта.
Оголошення procedure Free;
Приклад синтаксису / / Зруйнувати об’єкт Anobject

Anobject. Free;
Опис Якщо ви створили об’єкт, то для руйнування об’єкта та звільнення розподіленої пам’яті слід використовувати Free. Free гарантує успішну роботу навіть тоді, коли об’єкт є NIL, Тому Free слід завжди застосовувати замість Destroy. Насправді Free викликає Destroy, Якщо руйнується об’єкт відмінний від NIL.

Метод InheritsFrom

 






























Уражені об’єкти Всі об’єкти.
Призначення Метод InheritsFrom визначає, породжений чи об’єкт від об’єкта іншого типу.
Оголошення class function lnheritsFrom(ACIass: TCIass): Boolean;
Параметри
AClass Параметр може бути будь-яким класовим типом.
Приклад синтаксису
 / / Оскільки TButton є нащадком TWinControl,  / / Даний обробник події змінить заголовок  / / Форми
procedure TFonnl.ButtonlClick(Sender: TObject);
begin
if (Sender. lnheritsFrom(TWinControl)) then
Form1.Caption:=’TButton descends from TWinControl’;
end;

Опис InheritsFrom повертає True, Якщо тип об’єкта, зазначений параметром AClass,

є предком об’єкта. Якщо об’єкт не походить від типу, зазначеного
AClass,

метод повертає False.

Оператори is і as внутрішньо використовують InheritsFrom.


 

 

Метод InstanceSize

 


















Уражені об’єкти Всі об’єкти.
Призначення Метод InstanceSize повертає кількість пам’яті, розподілене кожного примірника об’єкта заданого типу.
Оголошення class function InstanceSize: Word;
Опис InstanceSize повертає кількість байт, необхідну для розміщення кожного примірника об’єкта, який викликає метод InstanceSize. Це внутрішня функція і зазвичай розробниками не застосовується. Замість неї використовуйте функцію sizeof;

ButtonSize := sizeof (Buttoni);

InstanceSize не є віртуальною, тому її не можна перекрити.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*