回调操作可以在 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());