Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-10172
denis24
2003-07-22 17:18
2003.08.04
Как проверить нажата цифра или буква в едите?


11-10157
blackalex
2002-12-03 17:39
2003.08.04
Где Кладов?


3-10111
Duce
2003-07-09 09:51
2003.08.04
Через чего лучше заходить на MS SQL из Дельфи?


14-10369
LiLa Ananda
2003-07-16 08:46
2003.08.04
Восприятие женского отказа мужчинами


1-10239
xRay
2003-07-20 01:56
2003.08.04
TListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский