вызов метода по имени и получение методов в классе
От: Vyatsek  
Дата: 17.05.07 04:53
Оценка:
Общий смысл таков.
Есть методы некоего класса разным пользователям можно выполнять только некоторые методы. Они выполняются путем нажатия кнопок на интерфейсе, в меню и т.д.
Я хочу реализовать так.
По нажатию кнопки вызывается делегат на функцию. Если пользователю разрешен метод, то в делегате указатель на процедуру, если не разрешен, то пустой указатель.
Почти реализовал, но есть некая загвоздка
using System;

delegate void ExecFunc(); // делегат или указатель на функцию

namespace Method_property_on_name
{
    class Class1
    {
        // некая функция котороую вызываем по имени
        public void ShowInfo(){
            Console.WriteLine("Some info");
            Console.ReadLine();
        }

        // запуск функции по указателю (разименование)
        public void ExecFunction(ExecFunc exFunc){
            exFunc();
        }

        [STAThread]
        static void Main(string[] args)
        {
            Class1 cl = new Class1();

//  1) ------------- инициализация функций которые разрешены пользователю -------
            // допустим пользователю разрешена ф-я ShowInfo
            // он вводит ShowInfo
            // далее я получаю этот метод по имени
            System.Type t = cl.GetType();
            System.Reflection.MethodInfo mi = t.GetMethod("ShowInfo");
            // что необходимо вставить в ExecFunc(??), чтобы содержимое
            // указывало на метод cl.ShowInfo
            //ExecFunc exf = new ExecFunc(??);
            // а это просто создание делегата на функцию
            ExecFunc exf=new ExecFunc(cl.ShowInfo); 
//  -----------------------------------------------------------------------------

// 2) ------------- вызов функции ----------
//            данную функцию можно будет вызвать где угодно
            exf();
//  ----------------------------------------
        }
    }
}

загвоздка в следующем, что нужно поставить вместо ?? в ExecFunc(??) из mi (MethodInfo) чтобы создать делегат
ExecFunc exf = new ExecFunc(??);

Я не могу получить указатель на метод...
Re: вызов метода по имени и получение методов в классе
От: Poul_Ko Казахстан  
Дата: 17.05.07 06:58
Оценка: 3 (1)
Здравствуйте, Vyatsek, Вы писали:

V>загвоздка в следующем, что нужно поставить вместо ?? в ExecFunc(??) из mi (MethodInfo) чтобы создать делегат
ExecFunc exf = new ExecFunc(??);

V>Я не могу получить указатель на метод...
На самом деле всё просто:
            ExecFunc exf = (ExecFunc)Delegate.CreateDelegate(   // Динамическое создание делегата из MethodInfo
                typeof(ExecFunc),   // Тип создаваемого делегата
                cl,                 // У кого вызывать метод
                mi);                // Какой метод вызывать
Brainbench transcript #6370594
Re[2]: вызов метода по имени и получение методов в классе
От: Vyatsek  
Дата: 17.05.07 09:10
Оценка:
Спасибо большое, все работает....
тока вместо mi надо было написать mi.Name, но это уже мелочи огромное СПАСИБО!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.