Текущий архив: 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