Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: 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 вся ветка

Текущий архив: 2008.06.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
2-1210771513
AlexeyMir
2008-05-14 17:25
2008.06.08
Как получить значение по его имени


15-1209541192
ПЛОВ
2008-04-30 11:39
2008.06.08
Разборка с NumLock


15-1209297079
Kostafey
2008-04-27 15:51
2008.06.08
С днем рождения ! 27 апреля


15-1209383805
Gydvin
2008-04-28 15:56
2008.06.08
Непонял конструкцию


2-1210671008
Виктор
2008-05-13 13:30
2008.06.08
Помогите найти ошибку в коде