我有以下类型的interface
public interface IMyInterface{
void Select(Action<int,int> selector)
}
现在这个interface
以多种方式实现,其中selector
函数中的Select
委托参数可能指向具有默认参数的函数。
例如:
public class MyClass {
public void func(int a, int b=1){
//body of function
}
}
函数调用是以不同的类进行的,格式如下
Select(new MyClass().func(10));
但是上面的代码引发了一个错误Delegate System.Action<int,int> does not take one argument
。为了支持default arguments
,需要声明一个自定义委托。但是在接口中不允许声明委托。
那么,我如何在上述场景中遏制错误?
答案 0 :(得分:0)
您无法通过new MyClass().func(10)
作为代理人参考。您只需传递new MyClass().func
。
Select方法的签名应更改为void Select(Action<int, int?> selector, int a, int b);
。 Delegate具有可空参数,因此引用方法可以选择发送值或使用默认值。
我在下面有一个工作代码试试这个
public interface IMyInterface
{
void Select(Action<int, int?> selector, int a, int? b);
}
public class MyClass : IMyInterface
{
public void func(int a, int? b=1 )
{
//body of function
}
public void Select(Action<int, int?> action, int a, int? b)
{
action(a, b);
}
}
class Program
{
static void Main(string[] args)
{
MyClass cls = new MyClass();
cls.Select(cls.func, 10, null);
}
}