Главная страница
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.019 c
1-10164
ghg
2003-07-22 14:46
2003.08.04
как узнать ширину окна которая была в Disign-time


14-10427
Knight
2003-07-18 01:37
2003.08.04
Вытаскивание писем из Outlook Express?


14-10374
CinCinNut
2003-07-16 11:01
2003.08.04
сабж, имхо...


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


14-10449
KaPaT
2003-07-18 13:29
2003.08.04
Кто-нибудь сталкиваля с этим бредом???