回调操作可以在 C# 中采用不同的参数吗?
Can a callback action take different arguments in c#?
不知道在 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());
}
我知道这段代码行不通,但是有什么方法可以实现我想要的吗?
不,单个代表不能有不同的参数列表。
简单的解决方案 - 让您的回调接受 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());
不知道在 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());
}
我知道这段代码行不通,但是有什么方法可以实现我想要的吗?
不,单个代表不能有不同的参数列表。
简单的解决方案 - 让您的回调接受 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());