Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.041 c
2-1210916354
Opera1
2008-05-16 09:39
2008.06.08
ValueListEditor1 добавление значений


2-1211025413
slimer
2008-05-17 15:56
2008.06.08
Отключение ошибок


15-1209135932
@!!ex
2008-04-25 19:05
2008.06.08
Принудительная перекомпиляция модуля.


2-1210753314
031178
2008-05-14 12:21
2008.06.08
Запрос в MS SQL


4-1190892438
apic
2007-09-27 15:27
2008.06.08
hIcon





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский