@LemanRass09

Как распознать метод, переданный в другую функцию и завернутый в делегат?

Здравствуйте!
Возникла проблема.
Хочется передать ссылку на метод в другой метод указывая при этом аргументы в передаваемый метод а в методе-получателе иметь возможность различать все переданные туда методы по какому-то признаку, который генерируется на основе данных, которые может предоставить делегат Action в примере ниже.

Очень не хочется для этого вместе с методом еще и передавать туда стринг типа ключ. Хотелось бы ключ генерить внутри и чтобы он всегда был одинаков для одного и того же полученного делегата и совершенно разный даже для похожих но все равно разных. Мне наверное нужно смотреть в сторону хэшей?

class Sender
{
    public void Main()
    {
        Receiver.AddMethod(() => SomeMethod("test"));
    }

    public void SomeMethod(string str)
    {
        //...
    }
}

class Receiver
{
    private static Dictionary<string, Action> Methods = new Dictionary<string, Action>();    

    public static void AddMethod(Action method)
    {
        //Тут надо некий уникальный идентификатор полученного метода
        //Псевдокод: Methods.Add(method.UniqueID, method);
    }
}


Не подскажите каким образом это можно достигнуть?

P.S. У Action есть такая штука как Method а у него Name которые подходят для случая если я буду метод в класс Receiver передавать не оборачивая в Action а в виде MethodGroup. Но к сожалению в таком случае я теряю возможность указывать параметры метода, который отправляю. А если я оборачиваю метод в Action - то я могу указать параметры, но в методе получателе имя уже не соответствует методу, который я хотел передать а соотествует методу, в котором происходит передача (то есть Main в примере).
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Комментировать
Пригласить эксперта
Ответы на вопрос 1
hePPer
@hePPer
может получится сделать так

class MyClass
    {
        public MyClass(Action method, Guid id, params object[] param)
        {
            Method = method;
            Params = param;
            Id = id;
        }
        public Action Method;
        public object[] Params;
        public Guid Id;
    }
    class Sender
    {
        public void Main()
        {
            Receiver.AddMethod(new MyClass(() => SomeMethod("dfsdf"),new Guid(), "dfsdf"));
        }

        public void SomeMethod(string str)
        {
            //...
        }
    }

    class Receiver
    {
        private static Dictionary<string, MyClass> Methods = new Dictionary<string, MyClass>();

        public static void AddMethod(MyClass myClass)
        {
            //Тут надо некий уникальный идентификатор полученного метода
            //Псевдокод: Methods.Add(myClass.Id, myClass);
        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы