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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2016, 16:42   #1
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию C# Вызов метода из консоли

Уважаемые форумчане, помогите одну простую задачку. Нужно следующее. Допустим в классе есть куча всяких методов method1, method2, method3 и т.д. Так вот, можно ли как-нибудь из консоли вызывать эти методы? Метод с конструкцией switch-case сразу отпадает, слишком большой получится. На одном из форумов наткнулся на вот такое решение.
Код:
using System;
using System.Reflection;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass mc = new MyClass();
            MethodInfo m = mc.GetType().GetMethod("Test");
            m.Invoke(mc, null);
 
            Console.ReadKey();
        }
    }
 
    class MyClass
    {
        public void Test()
        {
            Console.WriteLine("Write test");
        }
    }
}
В этом примере просто заменить константу на Console.ReadLine().
Но меня больше смутил следующий комментарий, в котором говорится, мол это нафиг нужно.
Натыкался еще на вариант с делегатами Dictionary<string,Action> (кажется так, если память не изменяет). Но тут у нас накладываются ограничения на входные и выходные параметры.
Третий вариант еще был, связанный со спец.атрибутами. Похож на первый.
Есть ли еще какие-нибудь варианты? И желательно чтобы можно было играть с входными параметрами (допустим, вводить название метода или ключевое слово, связанное с ним и через пробел параметры. Потом строку сплитить. По первой части вызывается метод, а остальные части конвертить и передавать параметрами).
Заранее спасибо.
max_prorok вне форума Ответить с цитированием
Старый 05.04.2016, 16:46   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Предполагаемые варианты решения рассказали, а саму задачу нормально не описали.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.04.2016, 17:00   #3
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Предполагаемые варианты решения рассказали, а саму задачу нормально не описали.
Как не сказал? По-моему все вполне доходчиво объяснил. Приведу пример. Например, ввожу в консоли следующее:
Цитата:
method321 12 34
По этому запросу должен вызываться метод method321(int a, int b), где a=12 и b=34.
Интересует вариант решения, который бы выполнялся с минимальными ресурсными затратами, ну и чем быстрее, тем лучше
max_prorok вне форума Ответить с цитированием
Старый 05.04.2016, 17:06   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А для чего это нужно? Что методы делают? Откуда берутся?

"нафиг нужно" или нет зависит от задачи.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.04.2016, 17:08   #5
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А для чего это нужно? Что методы делают? Откуда берутся?

"нафиг нужно" или нет зависит от задачи.
Самый простой и популярный пример, который мне приходит на ум - это консоль в CS.
Что делают методы неважно. Это, скажем, абстрактная задача. Просто интересен подход, как это делается, и как это делается правильно.
max_prorok вне форума Ответить с цитированием
Старый 05.04.2016, 17:18   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не бывает "правильно", все зависит от более конкретной постановки задачи.

Для какой-то ситуации рефлексия с поиском по имени хорошо подойдет, для какой-то словарь, для какой-то атрибуты (как в юнит тестах), для какой-то еще что-то.



Я кстати не понимаю зачем все в последнее время создают подобные темы в этом разделе вместо http://programmersforum.ru/forumdisplay.php?f=55
Тут вроде в основном однотипные задачи студентов/школьников типа "Напишите за меня пузырьковую сортировку". На более глубокие вопросы по ЯП и т.п. явно больше шансов получить ответ в специальном разделе.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 05.04.2016 в 17:25.
Alex11223 вне форума Ответить с цитированием
Старый 05.04.2016, 17:25   #7
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Ну как я читал, профи просто просматривают новые темы, вне зависимости от ветки форума. Это раз. Во-вторых, задача вроде бы как не особо глубокомысленная, чтобы оставлять ее в ветки по С#. Я так думаю, та ветка больше для профи или полупрофи, которые столкнулись с какими-нибудь проблемами в той или иной области (более глубокой нежели вопросы здесь), а другие мастера своего дела им помогают решить проблему. Ну и кто-то ж должен разбавлять здесь вопросы по поводу пузырьковой сортировки.=)
max_prorok вне форума Ответить с цитированием
Старый 05.04.2016, 17:34   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В новых сообщениях вроде очищается периодически (даже если не заходить в них или на форум), или если не очищаются, то скопится много страниц и проще так интересные разделы посмотреть.

Открою страшный секрет: большинство пользователей не особо "профи" (а надпись Профессионал под ником дается за 1000 сообщений) и в тематических разделах есть намного менее глубокомысленные темы
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.04.2016, 17:38   #9
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Когда я писал про профи не имел подпись на форуме (заметил ее только после вашего указания). Просто в конце концов не все же мыслят так же как и я. Я допустим считаю свой вопрос пустяковый, и на уровне студенческого, а кто-то считает что "пузырьковая сортировка" - это верх программирования.
max_prorok вне форума Ответить с цитированием
Старый 05.04.2016, 18:05   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

//перенести тему в раздел C# (си шарп) ?

а чем Вас не устроило решение с
Цитата:
Код:
MethodInfo m = mc.GetType().GetMethod("Test");
?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов метода EJB veter48 Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 7 23.09.2013 10:35
Вызов метода из программы Максим139 C# (си шарп) 5 26.05.2013 00:47
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
Создание и вызов формы из консоли Gr1ng0 Общие вопросы C/C++ 5 26.11.2010 09:54
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41