Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Динамическое создание классов   Найти похожие ветки 

 
qTorus   (2006-06-29 15:14) [0]

Возникла проблема нестандартного типа: необходимо создавать новые классы во время выполнения программы. Т. е. структура этих классов заранее неизвестна на этапе разработки программы. В хелпе ничего не нашёл. И вообще у меня возникают смутные сомнения насчёт наличия такой возможности.

Где-то слышал, что это можно сделать через интерфейсы. Сам ничего не знаю, так как с интерфейсами не работал.


 
Игорь Шевченко ©   (2006-06-29 15:21) [1]


> Т. е. структура этих классов заранее неизвестна на этапе
> разработки программы.


Массив вариантов ?


 
qTorus   (2006-06-29 15:29) [2]


> Массив вариантов ?

Если я правильно понял, то можно сделать так:

type TMyClass = class
 Fields: array of Variant;
end;


 
Игорь Шевченко ©   (2006-06-29 15:56) [3]

qTorus   (29.06.06 15:29) [2]

Можно и так. Можно и без класса


 
qTorus   (2006-06-29 16:01) [4]

Недостатки такого подхода:
1. Переменной типа Variant нельзя присвоить указатель или экземпляр класса
2. Каждая переменная типа Variant "весит" 20 байт, что приводит к неэкономному использованию памяти


 
Игорь Шевченко ©   (2006-06-29 16:03) [5]

qTorus   (29.06.06 16:01) [4]


> 1. Переменной типа Variant нельзя присвоить указатель или
> экземпляр класса


Можно


> 2. Каждая переменная типа Variant "весит" 20 байт, что приводит
> к неэкономному использованию памяти


Это есть. Ты хочешь предложить другой способ ?


 
qTorus   (2006-06-29 16:15) [6]


> > 1. Переменной типа Variant нельзя присвоить указатель
> или
> > экземпляр класса
>
>
> Можно

Компилятор пишет: E2010 Incompatible types: "Variant" and "Pointer"


 
Игорь Шевченко ©   (2006-06-29 16:40) [7]

procedure TForm1.Button1Click(Sender: TObject);
var
 V: Variant;
begin
 TVarData(V).VType := varByRef;
 TVarData(V).VPointer := Self;
 ShowMessageFmt ("%d", [VarType(V)]);
end;



Страницы: 1 вся ветка

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

Наверх




Память: 0.45 MB
Время: 0.008 c
4-1144230639
AlexeyT
2006-04-05 13:50
2006.07.16
Как определить отключенный сетевой диск?


6-1141986446
Kacnep
2006-03-10 13:27
2006.07.16
Клиент TClientSocket Сервер TIdTCPServer не понимают друг друга


2-1151408939
Delphi basic
2006-06-27 15:48
2006.07.16
DBDate


15-1150234030
Piter
2006-06-14 01:27
2006.07.16
Распечатка A1 на принтере A4


4-1144150645
Stanislav
2006-04-04 15:37
2006.07.16
Остановка параллельных процессов





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