Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить не известный заранее метод, плз хлп, а то мозг уже умер 
:(
    Опции темы
agapitPSG
Дата 19.8.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



TMethod(MetodEvent).Code :=Self.MethodAddress(quMenuItems.FieldByName('A_Menu_Code_Name').AsString); 
TMethod(MetodEvent).Data := Self; 
Levels[Level].OnClick := MetodEvent 


Енто на делпхи я так раньше делал. А как зделать на си решеточка не знаю.

PM MAIL   Вверх
Exception
Дата 19.8.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Чего-то я не понял, что ты хочешь. Если надо выполнить метод по имени, то надо получить тип объекта (через GetType()), а затем вызвать метод Invoke().
PM   Вверх
mr.DUDA
Дата 19.8.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Читаем про делегаты и события в C#. 

З.Ы. кстати, не "си решёточка", а "си шарп"  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
VisualProgrammerNET
Дата 19.8.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



///<offtop>
///По-моему "Си Решёточка" мило звучит  smile 
///</offtop>


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
agapitPSG
Дата 21.8.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Кароч, я знаю как читается С#. Байда такая, нужно прочитать из строки чейто типа "объект.метод()" и выполнить.
PM MAIL   Вверх
ivashkanet
Дата 21.8.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



agapitPSG, тебе подойдет рефлексия. И простанство имен System.Reflection
Ищи в этом направлении smile
Сам я в этом почти 0, но у нас на форуме есть мр.Дуда и др. участики, которые в этом спецы smile 

PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 21.8.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(agapitPSG @  21.8.2006,  08:27 Найти цитируемый пост)
 Байда такая, нужно прочитать из строки чейто типа "объект.метод()" и выполнить.

Что значит "объект.метод()" ? Может быть, имеется ввиду "тип_объекта.метод()" smile ? Тип по его имени можно получить с пом. статик метода Type.GetType(имя_типа) - вернёт экземпляр System.Type. Затем, метод по имени получается с пом. theType.GetMethod(), который вернёт MethodInfo либо null если метод не найден. Когда получили MethodInfo, можем вызвать метод, имея экземпляр объекта, если метод нестатический: theMethodInfo.Invoke(obj, arguments).


--------------------
user posted image
PM MAIL WWW   Вверх
agapitPSG
Дата 4.9.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Если вам не трудно будет ответить, то подскажите, как получить делегат на метод по названию. Найти и вызвать с помощью invoke я могу, но как получить делегат?

PM MAIL   Вверх
ivashkanet
Дата 4.9.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



agapitPSG, mr.DUDA ведь все расписал на пальцах  smile 
Код

class Program
    {
        static void Main(string[] args)
        {
            MyClass mc = new MyClass();

            Type type = mc.GetType();
            
            MethodInfo mthdInfo= type.GetMethod("MyMethod");

            mthdInfo.Invoke(mc, new object[0]);

            Console.ReadKey();
        }
    }

    public class MyClass
    {
        public void MyMethod()
        {
            MessageBox.Show("Меня вызвали");
        }
    }


P.S. Вот только не смог избавиться от new object[0]  smile ИМХО разработчики накосячили (не объявили как params)
PM MAIL WWW ICQ   Вверх
Дрон
Дата 4.9.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Цитата(ivashkanet @  4.9.2006,  12:36 Найти цитируемый пост)
Вот только не смог избавиться от new object[0]  smile ИМХО разработчики накосячили (не объявили как params) 

Вах! А null туда передать религия запрещает? smile

Цитата(MSDN)

parameters
An argument list for the invoked method or constructor. This is an array of objects with the same number, order, and type as the parameters of the method or constructor to be invoked. If there are no parameters, parameters should be a null reference (Nothing in Visual Basic).


Это сообщение отредактировал(а) Дрон - 4.9.2006, 17:17


--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 4.9.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Дрон @  4.9.2006,  17:11 Найти цитируемый пост)
Вах! А null туда передать религия запрещает?

А это намного лучше? Единственный плюс -- не создается объект.
А лучше всего бы 
Цитата(ivashkanet @  4.9.2006,  11:36 Найти цитируемый пост)
объявили как params


PM MAIL WWW ICQ   Вверх
agapitPSG
Дата 5.9.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Цитата(ivashkanet @ 4.9.2006,  11:36)
agapitPSG, mr.DUDA ведь все расписал на пальцах  smile 

Да с этим давно разобрался. Теперь надо делегату присвоить энтот метод. Определенного объекта.

Вы конечно извините паскудника, что задаю такие вопросы. Но самому толком и времени нету ни читать, ни ковырять.

Это сообщение отредактировал(а) agapitPSG - 5.9.2006, 10:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1207 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.