Общий смысл таков.
Есть методы некоего класса разным пользователям можно выполнять только некоторые методы. Они выполняются путем нажатия кнопок на интерфейсе, в меню и т.д.
Я хочу реализовать так.
По нажатию кнопки вызывается делегат на функцию. Если пользователю разрешен метод, то в делегате указатель на процедуру, если не разрешен, то пустой указатель.
Почти реализовал, но есть некая загвоздка
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(??);
Я не могу получить указатель на метод...
Здравствуйте, Vyatsek, Вы писали:
V>загвоздка в следующем, что нужно поставить вместо ?? в ExecFunc(??) из mi (MethodInfo) чтобы создать делегат ExecFunc exf = new ExecFunc(??);
V>Я не могу получить указатель на метод...
На самом деле всё просто:
ExecFunc exf = (ExecFunc)Delegate.CreateDelegate( // Динамическое создание делегата из MethodInfo
typeof(ExecFunc), // Тип создаваемого делегата
cl, // У кого вызывать метод
mi); // Какой метод вызывать
Спасибо большое, все работает....
тока вместо mi надо было написать mi.Name, но это уже мелочи огромное СПАСИБО!