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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразовать строку в вызов 
:(
    Опции темы
StepS
Дата 10.10.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем, такой вопрос:
есть строка: "MyObject.MyMethod("+10+");" как эту строку выполнить чтоб она отработала, т.е. нашелся объект MyObject и у него вызвался метод MyMethod в который передалось число 10
???

И вообще такое возможно ? smile

ответы типа: "Это делается через reflection. Посмотри в этом направлении" не принимаются, я сам догадываюсь, но как - я не нашел ! поэтому прошу помочь. Желательно примерчик
PM MAIL ICQ   Вверх
mr.DUDA
Дата 10.10.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(StepS @ 10.10.2005, 12:53)
ответы типа: "Это делается через reflection. Посмотри в этом направлении" не принимаются, я сам догадываюсь, но как - я не нашел !

На самом деле, примеров в MSDN достаточно, как и в Сети (например www.firststeps.ru) но всё же примерчик приведу:

Код
using System;
using System.Reflection;

namespace ConsoleApplication1
{
    public class MyObject
    {
        public string MyMethod(int a, int b)
        {
            return (a + b).ToString();
        }
    }

    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            // 1) получаем тип по имени
            Type type = Type.GetType("ConsoleApplication1.MyObject");
            // если тип в другой assembly, то так:
            Type other_type = Type.GetType("ConsoleApplication.MyObject,ConsoleApplication1");
            
            // 2) создаём объект по типу
            object obj = Activator.CreateInstance(type);
            
            // 3) получаем метод по имени
            MethodInfo mi = type.GetMethod("MyMethod");
            
            // 4) вызываем метод с 2-мя аргументами
            string result = (string)mi.Invoke(obj, new object[] {1, 200});
        }
    }
}



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


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Для твоего слючая:

Поиск нужного класса:
Код

Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies();
Type found = null;
foraech(Assembly asm in asms)
{
Type[] types = asm.GetExportedTypes();
foreach(Type type in types)
{
if (type.FullName == "MyNamespace.MyObject")
{
found = type;
break;
}
}


Ну дальше наверно и сам разберешся smile
Если что - спрашивай.


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


Шустрый
*


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

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



Круто, спасибо ! вот если объеденить ответы mr.DUDA and Mad то можно реализовать задачу. Пасиба еще раз обоим.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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