Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Что вообще обозначает   Найти похожие ветки 

 
Пубертанец   (2003-07-18 09:21) [0]

Subj


 
Skier ©   (2003-07-18 09:24) [1]

метакласс


 
Alex Konshin ©   (2003-07-18 09:30) [2]

Тип - указатель на класс. По сути указатель на VMT.


 
Digitman ©   (2003-07-18 09:42) [3]

Тип ссылки на класс, иногда называемый "метакласс", обозначается языковой конструкцией следующей формы :

class of type

где type - любой тип класса.
Идентификатор type сам по себе есть значение, тип которого - класс типа. Если type1 есть наследник type2, то конструкция class of type2 является совместимой (с т.з. языковых конструкций присвоения) с конструкцией class of type1.

Таким образом, код

type TClass = class of TObject;

var AnyObj: TClass;

объявляет переменную AnyObj, которая может содержать ссылку на любой класс.
Определение ссылочного классового типа не может присутствовать прямо в декларации переменной или в списке параметров, т.е. конструкция вида
var AnyObj: class of TObject;
недопустима

Переменной AnyObj можно присваивать nil.



 
Юрий Зотов ©   (2003-07-18 09:48) [4]

> Alex Konshin © (18.07.03 09:30)

Дык... указатель на VMT - это же сам класс и есть. Метакласс -это скорее указатель на указатель на VMT


 
Digitman ©   (2003-07-18 09:57) [5]


> Пубертанец


практическое применение (прочувствуй всю прелесть !):

type
TMyObject = class(TObject);
TMyObject1 = class(TMyObject);

TMyObjectClassRef = class of TMyObject;
var
MyObjectClassRef: TMyObjectClassRef;
MyObject: TMyObject;

function CreateInstanceOf(ClassRef: TMyObjectClassRef): TMyObject;
begin
Result := ClassRef.Create;
end;
...

MyObject := CreateInstanceOf(TMyObject); // создан экз-р TMyObject
...
MyObject := CreateInstanceOf(TMyObject1); // создан экз-р TMyObject1


 
Skier ©   (2003-07-18 10:05) [6]

>Пубертанец (18.07.03 09:21)
+ Digitman © (18.07.03 09:57)
Прелесть ещё и в том что таким образом можно создавать
экз-ры объектов, зная только имя класса. Что, кстати, использует
Delphi при чтении файла формы


 
Digitman ©   (2003-07-18 10:27) [7]


> Skier


да, конечно

уже иллюстрирую для автора :

type
TMyObject = class(TPersistent);
TMyObject1 = class(TMyObject);
TMyObject2 = class(TMyObject1);
TMyObject3 = class(TMyObject2);

TMyObjectClassRef = class of TMyObject;

var
MyObject: TMyObject;

function CreateInstanceOf(const RegisteredClassName: string): TMyObject;
begin
Result := GetClass(RegisteredClassName).Create;
end;
...

RegisterClasses([TMyObject, TMyObject1, TMyObject2, TMyObject3
]);
....
MyObject := CreateInstanceOf("TMyObject");
...
MyObject := CreateInstanceOf("TMyObject1");
...
MyObject := CreateInstanceOf("TMyObject2");
...
MyObject := CreateInstanceOf("TMyObject3");



Страницы: 1 вся ветка

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
4-10500
DMN
2003-05-30 08:28
2003.08.04
Каталоги несчастные!


1-10299
Pauk
2003-07-22 13:42
2003.08.04
Combobox и размещение DropedDown-списка


1-10198
Demn
2003-07-23 10:35
2003.08.04
RichEdit и абзацы


1-10266
McSimm2
2003-07-18 13:25
2003.08.04
Break для всех циклов


1-10205
defenseur
2003-07-23 11:14
2003.08.04
Safearray в Delphi