Главная страница
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.016 c
1-10167
Spawn
2003-07-22 19:08
2003.08.04
Word


3-10101
WDenis
2003-07-11 15:31
2003.08.04
Паковка таблицы через ADO


1-10282
NetCoder
2003-07-21 10:04
2003.08.04
Составление структуры HTML документа.


1-10284
greenrul
2003-07-19 13:23
2003.08.04
Помогите преобразовать процедуру из С в паскаль:


6-10316
Jack-of-shadow
2003-05-24 08:57
2003.08.04
WebBrowser