Форум: "Потрепаться";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизЧто вообще обозначает Найти похожие ветки
← →
Пубертанец (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c