Я знаю, что могу объявить делегатов с постоянными параметрами по умолчанию, такими как:
delegate void MyDelegate(int x, int y = 5);
, а затем вызвать его в любом месте, используя любой метод, соответствующий сигнатуре.
Хорошо, у меня есть множество методов, объявленных следующим образом:
public Something FirstMethod(float val = 10, int skip = 0){ ... return sth; }
public Something SecondMethod(float val = 20, int skip = 0){ ... return sth; }
public Something ThirdMethod(float val = 5, int skip = 0){ ... return sth; }
... этот список идет вверх, во всяком случае, у них у всех есть такая структура подписи. Дело в том, что все они имеют аргумент с плавающей точкой, который по умолчанию отличается от другого.
Затем я хочу создать делегата, который будет указывать на один из следующих методов:
delegate Something ProblematicDelegateType(<<WHAT WILL GO HERE>>);
ProblematicDelegateType myFunc;
if(someValue == someParameter){
myFunc = FirstMethod;
}else if(...){
myFunc = SecondMethod;
}else...
...
}
myFunc();
myFunc(skip:100);
Я хочу иметь возможность вызывать myFunc
без параметров или с параметром skip
. В этой части кода первый параметр val
НЕ используется. (они используются в других местах).
Что пойдет в список аргументов делегата? Я хочу сохранить аргумент по умолчанию val
этого метода, каким бы он ни был.