如何在接口中将委托声明为具有默认参数的函数?

时间:2014-09-16 09:04:15

标签: c# interface delegates

我有以下类型的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,需要声明一个自定义委托。但是在接口中不允许声明委托。

那么,我如何在上述场景中遏制错误?

1 个答案:

答案 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);
    }

}