[英]Can I declare a delegate in an Object's New() constructor? Or with initialization parameters?
[英]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.