【发布时间】:2011-12-03 04:17:46
【问题描述】:
我有以下代码:
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 的重载版本以消除可选参数。
这是唯一的选择还是有另一种方法,因为现在首选的选择是使用可选参数而不是重载方法?
【问题讨论】:
-
完全不相关,但看起来很相似:stackoverflow.com/questions/707780/…
标签: c# oop delegates optional-parameters