Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что такое class of ?


TStas ©   (2008-05-05 18:55:00) 

Что такое Array of я понимаю (слава Богу, три года пишу на Дельфях), но только сегодня впервые увидел вот такую штуку:
TWinControlClass = class of TWinControl;
Что это и как с ней бороться.


Юрий Зотов   (2008-05-18 23:58:00) [1]

> TStas ©   (18.05.08 23:57) [7]

Есть. У Конопки - точно.


TStas   (2008-05-18 23:57:00) [2]

Вот, между прочем, про class of тоже нет ни в одной книжке.


Восхищенный   (2008-05-05 20:40:00) [3]

Добавление.

Ключевое слово virtual в объявлении конструктора прерывает его старую цепочку наследования и начинает новую, а ключевое слово reintroduce говорит компилятору, что старый конструктор закрыт умышленно.


Восхищенный   (2008-05-05 20:37:00) [4]

> 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);


TStas   (2008-05-05 19:19:00) [5]

Мне просто не нравится переопределять гордое имя конструктора. Дело в том, что мне сейчас нужно сохранять в файл граф. Притом этот граф, зараза, почти произвольный - это схема риэлтерской сделки, а цепочки там могут быть весьма длинными. Дерево, то бишь TTreeNode ну никак не годится, т. к. ветки у него никак не могут замыкаться, да и пользователю неудобно будет с ним работать. Поэтому пришлось писать своё... Стрелочка, чтобы их соединять, у меня с прошлой проги осталась. Ну, вот и встречаю всякие новости для себя.


Palladin   (2008-05-05 19:05:00) [6]

именно вкупе с этим и используются виртуальные конструкторы и именно по этому я тебе рекомендовал не делать реинтродьюс, а описать свой под другим именем.

тип class of TКакойТоКласс означает что переменная этого типа является классом (класс, в делфи, это тоже конкретная, а не абстрактная сущность) или наследником класса TКакойТоКласс.

зачем это нужно? например механизм сериализации компонентов VCL построен на этом. вообще это очень мощная вещь...


{RASkov}   (2008-05-05 19:00:00) [7]

Это называется ссылка на класс...

Вот возможный пример
type TControlClass = class of TControl; //уже есть стандартное описание

var ORef: TControlClass;
   Obj: TControl;
begin
 if CreateButton then ORef:=TButton else ORef:=TLabel;
 Obj:=Oref.Create();
....
end;


Reindeer Moss Eater   (2008-05-05 18:59:00) [8]

Тип для хранения ссылки на класс.


Наверх

Титульная страница Поиск, карта сайта Написать письмо