|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.02.2016, 22:27 | #1 |
Пользователь
Регистрация: 19.09.2010
Сообщений: 20
|
Как обратиться к методу класса по его имени?
Здравствуйте!
Я в программировании новичек, поэтому допускаю, что вопрос мой идиотский (ежли это так - так и пишите!), но всю голову уже сломал. Задача следующая: - Есть некий класс TMyClass = Class(TObject) - У класса TMyClass есть метод TMyClass.DoSomething: String; - У класса есть свойство TMyClass.MyField: String; - Нужна функция вида function MyFunc(tag: String; cls: TMyClass): String; которая бы брала имя метода/свойства в текстовой форме из переменной tag (т. е. по сути tag = 'TMyClass.DoSomething' или tag = TMyClass.MyField) и вызывал бы этот метод/обращался бы к этому свойству в самом экземпляре класса TMyClass. Иначе говоря, функция прочитав из файла текстовый тег с именем свойства/метода класса должна обратиться к соответствующему методу/свойству класса. Сперва хотел реализовать всё вышеуказанное путем вынесения класса в dll и обращения к методу через GetProcAddress... Но! Во-первых очень не хочется привлекать dll - тем паче, что передаваться будут строки. ShareMem я не очень жалую, потому как он постоянно чем-то недоволен. А вручную следить за "кто выделил - тот и освобождает" - неохота. Возможно, есть другой метод? Заранее спасибо! P.S. Совершенно не прошу готовый код - достаточно намекнуть какая функция здесь может быть полезна или каким путем лучше пойти - остальное я раскопаю сам! |
09.02.2016, 22:51 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ну если их всего два, то if else наше все. Это по простому. По сложному ищи примеры работы с RTTI
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
10.02.2016, 01:41 | #3 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,887
|
2 ipdd
Аватар +1 Даже если функций более двух. Если их гораздо более, тогда нужно полностью озвучить саму задачу, а не вопрос как сделать Х. |
10.02.2016, 07:27 | #4 | |
Пользователь
Регистрация: 19.09.2010
Сообщений: 20
|
Цитата:
Но, учитывая, что методов и свойств у класса не один десяток... Писать я в такой конструкции закончу к 2017 году - так что пойду изучать RTTI. Огрномное спасибище за наводку! |
|
10.02.2016, 08:29 | #5 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
C чего бы это? Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
10.02.2016, 19:15 | #6 |
Пользователь
Регистрация: 19.09.2010
Сообщений: 20
|
Да он, он родимый... Решение моей задачи 100% где-то здесь - это очевидно даже при беглом взгляде на функции... Токмо пока всё больше вижу как получить текстовое представление имени класса из класса. А мне как раз наоборот - надобно из текстового имени класса обратиться к самому классу...
|
10.02.2016, 19:18 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Не зря же написал - ищи примеры работы с этим. Их то нет в этом исходнике
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
10.02.2016, 19:54 | #8 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Учи матчасть. и хэлп жэж есть.Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
10.02.2016, 20:46 | #9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,883
|
Дельфи новая ? 2010/хе+ ?
Если да, то доступна новая, более мощная RTTI В любом случае гуглите по словам Delphi RTTI Invoke method by its name просто учитывайте, что подходы для старой и новой ртти будут отличаться. |
10.02.2016, 21:08 | #10 |
Пользователь
Регистрация: 19.09.2010
Сообщений: 20
|
Не, Delphi старенькая - 6-ка. Но, вроде, всё что нужно нашел... Один вопрос только пока: для того, чтобы использовать RTTI (TypInfo) достаточно ли будет обрамить используемые классы директивой компилятора {M+}...{M-} или всё же придется "колдовать" со свойствами/методами классов (перемещать их в секцию published)?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как обратиться к переменной класса в методе, не меняя названия переменных, и убрав модификатор static у переменной класса? | nevender | Помощь студентам | 8 | 25.01.2016 09:46 |
C# Как обратиться к методу из другой формы? | Таксист | Windows Forms | 2 | 24.12.2014 16:59 |
С++ Builder обращение к методу класса из другого класса | Astat | Помощь студентам | 2 | 20.01.2013 17:59 |
Как обратиться к полям базового класса? | Azartov | Общие вопросы C/C++ | 13 | 03.07.2011 20:32 |
Как обратиться к методу потомку ? | [MI_nor] | Общие вопросы по Java, Java SE, Kotlin | 4 | 22.03.2011 08:13 |