Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2016, 22:27   #1
ipdd
Пользователь
 
Регистрация: 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. Совершенно не прошу готовый код - достаточно намекнуть какая функция здесь может быть полезна или каким путем лучше пойти - остальное я раскопаю сам!
ipdd вне форума Ответить с цитированием
Старый 09.02.2016, 22:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну если их всего два, то if else наше все. Это по простому. По сложному ищи примеры работы с RTTI
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2016, 01:41   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

2 ipdd

Аватар
+1
Даже если функций более двух. Если их гораздо более, тогда нужно полностью озвучить саму задачу, а не вопрос как сделать Х.
northener вне форума Ответить с цитированием
Старый 10.02.2016, 07:27   #4
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну если их всего два, то if else наше все. Это по простому. По сложному ищи примеры работы с RTTI
Ну if...else - это 100% рабочая конструкция!
Но, учитывая, что методов и свойств у класса не один десяток... Писать я в такой конструкции закончу к 2017 году - так что пойду изучать RTTI.
Огрномное спасибище за наводку!
ipdd вне форума Ответить с цитированием
Старый 10.02.2016, 08:29   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
что пойду изучать RTTI.
Чот у меня стойкая ассоциация с модулем TypInfo.pas...
C чего бы это?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.02.2016, 19:15   #6
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Чот у меня стойкая ассоциация с модулем TypInfo.pas...
C чего бы это?
Да он, он родимый... Решение моей задачи 100% где-то здесь - это очевидно даже при беглом взгляде на функции... Токмо пока всё больше вижу как получить текстовое представление имени класса из класса. А мне как раз наоборот - надобно из текстового имени класса обратиться к самому классу...
ipdd вне форума Ответить с цитированием
Старый 10.02.2016, 19:18   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не зря же написал - ищи примеры работы с этим. Их то нет в этом исходнике
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2016, 19:54   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Да он, он родимый... Решение моей задачи 100% где-то здесь - это очевидно даже при беглом взгляде на функции...
Учи матчасть.
и хэлп жэж есть.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.02.2016, 20:46   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Дельфи новая ? 2010/хе+ ?
Если да, то доступна новая, более мощная RTTI
В любом случае гуглите по словам Delphi RTTI Invoke method by its name
просто учитывайте, что подходы для старой и новой ртти будут отличаться.
phomm вне форума Ответить с цитированием
Старый 10.02.2016, 21:08   #10
ipdd
Пользователь
 
Регистрация: 19.09.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Дельфи новая ? 2010/хе+ ?
Если да, то доступна новая, более мощная RTTI
В любом случае гуглите по словам Delphi RTTI Invoke method by its name
просто учитывайте, что подходы для старой и новой ртти будут отличаться.
Не, Delphi старенькая - 6-ка. Но, вроде, всё что нужно нашел... Один вопрос только пока: для того, чтобы использовать RTTI (TypInfo) достаточно ли будет обрамить используемые классы директивой компилятора {M+}...{M-} или всё же придется "колдовать" со свойствами/методами классов (перемещать их в секцию published)?
ipdd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к переменной класса в методе, не меняя названия переменных, и убрав модификатор 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