簡體   English   中英

如何在接口中使用默認參數聲明委托給函數?

[英]How can I declare delegate to a function with default parameters in an interface?

我有以下類型的interface

public interface IMyInterface{
     void Select(Action<int,int> selector)
}

現在,該interface已通過多種方式實現,其中Select函數中的selector委托參數可能指向具有默認參數的函數。 例如:

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 ,需要聲明一個自定義的委托。 但是接口中不允許聲明委托。

那么,如何抑制上述情況下的錯誤?

您不能通過new MyClass().func(10)作為委托引用。 您可以只傳遞new MyClass().func

Select方法的簽名應更改為void Select(Action<int, int?> selector, int a, int b); 委托具有可為空的參數,因此引用方法可以選擇發送值或使用默認值。

我下面有一個工作代碼嘗試

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM