как изменить подпись метода библиотеки C # - PullRequest
0 голосов
/ 27 апреля 2019

Я использую некоторую внешнюю библиотеку, у которой есть один метод, кроме параметра типа Func.

    class LibClass
    {
        public void libMethod(Func<int, int, int> add)
        {
            add(5, 5);
        }

    } 

В моем консольном приложении я потребляю как

class Program
    {
        public static  int MyMethod(int a, int b) // want to pass third parameter 
        {
            return 0;
        }
        static void Main(string[] args)
        {

            LibClass obj = new LibClass();
            obj.libMethod(Program.MyMethod); 
            Console.Read();

        }
    }

Я хочу передатьнекоторый дополнительный параметр к MyMethod (), но я не могу передать его.Так как же изменить сигнатуру метода библиотеки?или как я могу передать дополнительный параметр в MyMethod ()?

1 Ответ

3 голосов
/ 27 апреля 2019

Вы должны были бы перекомпилировать библиотеку из исходного кода, чтобы изменить ее методы, но я думаю, что это может быть XY Проблема .Вам не нужно менять сигнатуру для передачи другого параметра в ваш метод.Пример:

int DoSomeMath(int a, int b, int x)
{
    return (a + b) * x;
}

Если вы хотите, чтобы libMethod вызывал DoSomeMath с большим количеством параметров, вы можете просто обернуть его в лямбду и добавить свой собственный:

void Main()
{
    LibClass obj = new LibClass();
    obj.libMethod((a, b) => DoSomeMath(a, b, 42));
    Console.Read();
}

Лямбда получит a и b от libMethod, передаст их вместе с 42 в DoSomeMath и вернет возвращаемое значение DoSomeMath обратно в libMethod.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...