Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизЧто такое class of ? Найти похожие ветки
← →
TStas © (2008-05-05 18:55) [0]Что такое Array of я понимаю (слава Богу, три года пишу на Дельфях), но только сегодня впервые увидел вот такую штуку:
TWinControlClass = class of TWinControl;
Что это и как с ней бороться.
← →
Reindeer Moss Eater © (2008-05-05 18:59) [1]Тип для хранения ссылки на класс.
← →
{RASkov} © (2008-05-05 19:00) [2]Это называется ссылка на класс...
Вот возможный пример
type TControlClass = class of TControl; //уже есть стандартное описание
var ORef: TControlClass;
Obj: TControl;
begin
if CreateButton then ORef:=TButton else ORef:=TLabel;
Obj:=Oref.Create();
....
end;
← →
Palladin © (2008-05-05 19:05) [3]именно вкупе с этим и используются виртуальные конструкторы и именно по этому я тебе рекомендовал не делать реинтродьюс, а описать свой под другим именем.
тип class of TКакойТоКласс означает что переменная этого типа является классом (класс, в делфи, это тоже конкретная, а не абстрактная сущность) или наследником класса TКакойТоКласс.
зачем это нужно? например механизм сериализации компонентов VCL построен на этом. вообще это очень мощная вещь...
← →
TStas © (2008-05-05 19:19) [4]Мне просто не нравится переопределять гордое имя конструктора. Дело в том, что мне сейчас нужно сохранять в файл граф. Притом этот граф, зараза, почти произвольный - это схема риэлтерской сделки, а цепочки там могут быть весьма длинными. Дерево, то бишь TTreeNode ну никак не годится, т. к. ветки у него никак не могут замыкаться, да и пользователю неудобно будет с ним работать. Поэтому пришлось писать своё... Стрелочка, чтобы их соединять, у меня с прошлой проги осталась. Ну, вот и встречаю всякие новости для себя.
← →
Восхищенный (2008-05-05 20:37) [5]> TStas © (05.05.08 19:19) [4]
> Мне просто не нравится переопределять гордое имя конструктора.
Можно и не переопределять, и тот же механизм метаклассов с виртуальными конструкторами использовать.
type
TMyClass = class(...)
public
constructor Create(свои_параметры); reintroduce; virtual;
end;
TMyClassFamily = class of TMyClass;
TMyClass2 = class(TMyClass)
...
end;
TMyClass3 = class(TMyClass)
...
end;
TMyClass4 = class(TMyClass2)
...
end;
function CreateMyClassInstance(MyClass: TMyClassFamily): TMyClass;
begin
Result := MyClass.Create(свои_параметры);
end;
var
MyObject: TMyClass;
MyObject := CreateMyClassInstance(TMyClass);
MyObject := CreateMyClassInstance(TMyClass2);
MyObject := CreateMyClassInstance(TMyClass3);
MyObject := CreateMyClassInstance(TMyClass4);
← →
Восхищенный (2008-05-05 20:40) [6]Добавление.
Ключевое слово virtual в объявлении конструктора прерывает его старую цепочку наследования и начинает новую, а ключевое слово reintroduce говорит компилятору, что старый конструктор закрыт умышленно.
← →
TStas © (2008-05-18 23:57) [7]Вот, между прочем, про class of тоже нет ни в одной книжке.
← →
Юрий Зотов © (2008-05-18 23:58) [8]> TStas © (18.05.08 23:57) [7]
Есть. У Конопки - точно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c