Создание класса по его имени
-
- Сообщения: 273
- Зарегистрирован: 30 июн 2005, 14:53
типы в run-time описывать нельзя
можно создавать (как это делает, например TCollection) тип класса и указывать его.
например:
и в коде создавать уже его.
пример использования:
например:
Код: Выделить всё
type
TObjectClass = class of TObject;
Код: Выделить всё
function CreateComeClass(AClass: TObjectClass): TObject;
begin
Result := AClass.Create;
end;
Код: Выделить всё
Generate := CreateComeClass(TGenerate);
С уважением, Lost Angel...
2 Blod_Magic
Я бы не стал так котигорично утверждать о невозможности создания класса динамически. Если покопаться в структуре VMT, то все может быть. И если класс создать все же не получиться, то скорее всего возможно изменить через VMT заготовленное заранее описание
TMyClass = class(TObject) end;
до неузнаваемости, добавив ему необходимые поля и методы
Я бы не стал так котигорично утверждать о невозможности создания класса динамически. Если покопаться в структуре VMT, то все может быть. И если класс создать все же не получиться, то скорее всего возможно изменить через VMT заготовленное заранее описание
TMyClass = class(TObject) end;
до неузнаваемости, добавив ему необходимые поля и методы
-
- Сообщения: 74
- Зарегистрирован: 10 май 2006, 12:19
- Откуда: Санкт-Петербург
- Контактная информация:
RegisterClass регистрирует любой класс, необязательно визуальный.
Для получения класса советую использовать GetClass, а не FindClass, т.к. если не находит класс с таким именем, то возвращает nil, а FindClass генерирует исключение.
Я так делал в своей программе: и классы объекстов и списковые классы являлись наследниками от одного объекта. Потом объявлял TMyClass = class of TMyObject и еще писал функцию проверяющую, является ли данный данный класс наследником от другого
Для получения класса советую использовать GetClass, а не FindClass, т.к. если не находит класс с таким именем, то возвращает nil, а FindClass генерирует исключение.
Я так делал в своей программе: и классы объекстов и списковые классы являлись наследниками от одного объекта. Потом объявлял TMyClass = class of TMyObject и еще писал функцию проверяющую, является ли данный данный класс наследником от другого
Ты загрузил транслятор, описал тип и запустил процесс трансляции. Тип создан, но для транслятора это рантайм. Или ты имеешь ввиду, что прилада не может создавать новые типы в рантайм? Запихай в неё транслятор с каким нибудь метатипом - сможет." писал(а):типы в run-time описывать нельзя
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
А если разрабатывается язык, то причём здесь вообще прилады и ограничения на создание типа в рантайме? Уж если язык, то значит транслятор, а транслятор должен создавать типы именно в рантайме. Возможно даже только в рантайме." писал(а):разрабатываю язык GPSS
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".