不知道在c#上是否可能有一个采用不同参数的回调。
public void Woof(){
Console.WriteLine("woof");
}
public void Woof(System.Action callback){
Console.WriteLine("woof");
callback();
}
public void Foo(System.Action callback){
callback();
callback(()=> SomeOtherFunction());
}
public void TheCaller(){
Foo(Woof());
}
我知道这段代码无法正常工作,但是有没有办法完成我想要的?
答案 0 :(得分:0)
不,单个委托不能有不同的参数列表。
简单的解决方案-使您的回调函数接受null
/对于您没有的参数为空:
public void Foo(Action<Action> callbackWithOptionalArg)
{
callbackWithOptionalArg(null);
callbackWithOptionalArg(() => SomeOtherFunction());
}
Foo( optionalAction => optionalAction == null ? Woof() : Wool(optionalAction));
替代方法-具有以多种方法作为参数的接口:
interface IWoof
{
void Woof();
void Woof(System.Action callback)
}
public void Foo(IWoof dog)
{
dog.Woof();
dog.Woof(() => SomeOtherFunction());
}
class MyWoof : IWoof
{
public void Woof(){
Console.WriteLine("woof");
}
public void Woof(System.Action callback){
Console.WriteLine("woof with callback");
callback();
}
}
Foo(new MyWoof());