У меня есть следующий код:
public static MyMethod()
{
...Do something
ProtectedMethod(param1, param2);
...Do something
}
protected static void ProtectedMethod(IEnumerable<string> param1, string param2, int param3 = 1)
{
... Do something
}
Обратите внимание на необязательный параметр param3.
Теперь по целому ряду причин мне нужно извлечь код метода MyMethod в его собственный класс, но я не могу извлечь ProtectedMethod с ним из-за всех классов, которые наследуются от этого, и мне нужно, чтобы изменения были небольшими и изолированы. Поэтому я решил, что у меня может быть делегат Action < > в новом классе с той же сигнатурой, что и ProtectedMethod.
Проблема заключается в том, что если я объявляю делегат следующим образом:
protected readonly Action<IEnumerable<string>, string, int> m_ProtectedMethod;
Извлеченный код не нравится, потому что он говорит, что метод вызывается только с двумя параметрами.
И если я объявлю делегат следующим образом:
protected readonly Action<IEnumerable<string>, string> m_ProtectedMethod;
Когда я отправляю его как параметр в новый класс, ему это не нравится, потому что метод определяется как имеющий три параметра, а не два.
Пока единственный способ решить эту проблему - создать перегруженную версию ProtectedMethod для устранения необязательного параметра.
Является ли это единственным вариантом или есть другой способ сделать это, так как теперь предпочтительным выбором является наличие необязательных параметров вместо перегруженных методов?