Ser*_*ero 30 c# oop delegates optional-parameters
我有以下代码:
public static MyMethod()
{
...Do something
ProtectedMethod(param1, param2);
...Do something
}
protected static void ProtectedMethod(IEnumerable<string> param1, string param2, int param3 = 1)
{
... Do something
}
Run Code Online (Sandbox Code Playgroud)
注意可选的param3参数.
现在由于很多原因,我需要将MyMethod方法的代码提取到它自己的类中,但我不能用它提取ProtectedMethod,因为所有继承自这个的类都需要保持变化小而孤立.所以我想我可以在新类中使用与ProtectedMethod相同签名的Action <>委托.
问题是如果我像这样声明委托:
protected readonly Action<IEnumerable<string>, string, int> m_ProtectedMethod;
Run Code Online (Sandbox Code Playgroud)
提取的代码不喜欢它,因为它表示只使用两个参数调用该方法.
如果我像这样声明代表:
protected readonly Action<IEnumerable<string>, string> m_ProtectedMethod;
Run Code Online (Sandbox Code Playgroud)
当我将它作为参数发送到新类时,它不喜欢它,因为该方法被定义为具有三个参数而不是两个参数.
到目前为止,我想到解决这个问题的唯一方法是创建一个重载版本的ProtectedMethod来消除可选参数.
这是唯一的选择还是有另一种方法,因为现在首选的选择是使用可选参数而不是重载方法?
SLa*_*aks 30
可选参数是方法或委托参数的属性.在编译时调用具有已知可选参数的签名(方法或委托)时,编译器将在调用点处插入可选参数值.
运行时不知道可选参数,因此您无法在调用时插入可选参数.
相反,您需要使用可选参数声明自定义委托类型:
public delegate void MyDelegate(IEnumerable<string> param1, string param2, int param3 = 1);
Run Code Online (Sandbox Code Playgroud)
调用此委托时,无论其包含的方法声明如何,您都可以省略第三个参数.
归档时间: |
|
查看次数: |
14104 次 |
最近记录: |