Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 30.11.2018
Сообщений: 38

Как можно создать экземпляр класса по его имени

23.03.2022, 15:41. Показов 3752. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим у меня есть класс от которого порождены несколько классов и как из родительского класса создать экземпляр дочернего класса имея только переменную string в которой записано имя дочернего класса?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2022, 15:41
Ответы с готовыми решениями:

Создать экземпляр одного класса в Main, и передать его в экземпляр другого класса
Добрый день. Подскажите пожалуйста. есть несколько классов-файлов в одном пакете. class one class two class main... Нужно...

Как можно создать экземпляр класса в методе другого класса?
namespace Wrapper { abstract class photoCamera { string nameCamera; //Название марки фотокамеры string...

Создать экземпляр по полному имени класса
Подскажите, как обратиться к классу по его полному имени в TypeScript. В самом простом случае, есть два класса: namespace API { ...

28
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
24.03.2022, 13:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
ну а по поводу NewGraphic := GraphicClass.Create - это верная запись
Ну, может и верная, но зачем такие навороты?
Функция вполне могла бы возвращать True/False, там ниже все равно проверка на nil и выброс из процедуры.
И если nil, то создавать
Delphi
1
NewGraphic := TGraphicClass.Create;
потому что тип класса в этом месте известен (TGraphicClass).

P.S. Или это как-то связано с тем, что GraphicClass - глобальная переменная?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
24.03.2022, 14:40
Цитата Сообщение от Constcat Посмотреть сообщение
GraphiсClass объявлен, но неинициализирован.
Это там поле так называется, инициализируется при регистрации нового формата файла.

Добавлено через 3 минуты
Цитата Сообщение от Constcat Посмотреть сообщение
GraphicClass - глобальная переменная?
Нет. Там каждый графический класс регистрируется (вроде в TGraphic, если не ошибаюсь), и смысл в том, что функция возвращает ссылку на класс нужный, с помощью которого можно создать объект.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
24.03.2022, 15:20
Цитата Сообщение от AzAtom Посмотреть сообщение
и смысл в том, что функция возвращает ссылку на класс нужный, с помощью которого можно создать объект.
А почему сразу экземпляр класса не возвращать? Ведь не проблема же его создать прямо в процедуре, где проверяется расширение?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
24.03.2022, 15:32
Constcat, разбивают на более мелкие действия. Может, в другом месте тоже используется ссылка на класс. Или с заделом на будущие использования.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
24.03.2022, 20:20
Цитата Сообщение от AzAtom Посмотреть сообщение
ссылка на класс.
Хотелось бы подробнее об этом узнать...
Т.е., возврат ссылки на переменную равноценно возврату ссылки на класс этой переменной?
Это давно такое в Delphi?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
24.03.2022, 20:54
Constcat, я скопировал из исходников, какие ко мне вопросы?

Вот методы добавления класса в список:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
constructor TFileFormatsList.Create;
begin
  inherited Create;
  Add('wmf', SVMetafiles, 0, TMetafile);
  Add('emf', SVEnhMetafiles, 0, TMetafile);
  Add('ico', SVIcons, 0, TIcon);
  Add('bmp', SVBitmaps, 0, TBitmap);
end;
...
 
procedure TFileFormatsList.Add(const Ext, Desc: String; DescID: Integer;
  AClass: TGraphicClass);
var
  NewRec: PFileFormat;
begin
  New(NewRec);
  with NewRec^ do
  begin
    Extension := AnsiLowerCase(Ext);
    GraphicClass := AClass;
    Description := Desc;
    DescResID := DescID;
  end;
  inherited Add(NewRec);
end;
И вот потом перебирает весь список и проверяет на соответствие содержимое поля расширения.
Это из Delphi 7. Не думаю, что в XE этот момент кардинально поменялся. По крайней мере, в XE3 было так же, насколько помню.
1
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
24.03.2022, 21:47
Цитата Сообщение от AzAtom Посмотреть сообщение
Constcat, я скопировал из исходников, какие ко мне вопросы?
А к кому? )))))
Исходники на вопросы не отвечают. )))
Я первый раз такую конструкцию встречаю, интересно!
Надо будет при случае попробовать. )))
0
26 / 21 / 7
Регистрация: 23.03.2022
Сообщений: 87
25.03.2022, 22:16
Благодаря RTTI вы можете не только создать экземпляр класса. Но и написать всю программу, без какой либо - то сложности.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
25.03.2022, 22:59
Цитата Сообщение от firatov Посмотреть сообщение
Благодаря RTTI
Использовать RTTI - это хакерство. В программах лучше это не использовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2022, 22:59

Как правильно создать экземпляр класса для доступа к его свойствам
Всем доброго времени суток. Сижу уже долго над этим участком. У меня есть класс Pinball, я создаю экземпляр этого класса PinMe. Нужно...

Как создать экземпляр класса внутри другого, явно не указывая его название
Как создать екземпляр класса внутри класса явно не указывая его название и не присваивая в переменную его название class Test{ ...

Что означает ^ в имени класса и как его можно использовать?
Вопрос к знатокам С++. При работе в Visual Studio, имел дело с классом String пространства имен System: System::String^ My =...

Создать экземпляр класса по его конструктору
Здравствуйте, допустим у нас есть метод: // Создает экземпляр класса по его конструктору (псевдокод) public function...

Создать экземпляр класса, выбрав его из меню и нажав на кнопку
Есть классы Dog и Cat, кнопка "Запись" и две "радиокнопки", опять таки Dog и Cat. Вот что я хочу сделать: например ты кликаешь на Dog/Cat,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru