Вниз
Скачать: CL | DM;

Что такое 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
2-1211128627
pirks
2008-05-18 20:37
2008.06.08
TActionManager динамическое изменение свойст.


4-1190441616
antoxa2005
2007-09-22 10:13
2008.06.08
Открыть порт в Брэндмауэре WinXP SP2


15-1209325537
No_Dead
2008-04-27 23:45
2008.06.08
Есть ли такие проги или это уже ИИ?%>


15-1208979144
Loginov Dmitry
2008-04-23 23:32
2008.06.08
Многопоточность и Delphi


11-1190041757
Alexeis_
2007-09-17 19:09
2008.06.08
Более подробная информация о создании зеркал




   Наверх