相关疑难解决方法(0)

参数动作<T1,T2,T3>,其中T3可以是可选的

我有以下代码:

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来消除可选参数.

这是唯一的选择还是有另一种方法,因为现在首选的选择是使用可选参数而不是重载方法?

c# oop delegates optional-parameters

30
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

delegates ×1

oop ×1

optional-parameters ×1