传递具有不同参数的操作

Passing an Action with Different Parameters

我在 C# 中有一个名为 Button 的 class,我希望 Button 具有可以通过其构造函数传递的功能,并且只要 Button 被按下Action 执行。

Button(Rect rect, string text, Action Func);

我已经使用了 Action 并且它工作得很好,直到我发现我无法通过参数传递 void Action

例如:

void DoSomething(string str);

我怎样才能传递带有任何参数的 void Action

按钮不必关心参数,但它仍然需要传递一个没有参数并返回 void 的委托。这很容易做到:

new Button(rect, text, () => YourMethod(whateverArgument))

根据您要执行的操作,whateverArgument 可以是局部变量、常量或字段。想想什么时候应该读取传递给内部方法的值。

当然可以传递参数,只需使用以下内容:

Button b = new Button(.., .., () => DoSomething("YourString");

我建议你使用简化的command pattern: 创建基础 class 或接口命令

interface ICommand
{
    void Execute();
}

//Create secific command and pass parameters in constructor:
class Command : ICommand
{
    public Command(string str)
    {
        //do smth
    }
    void Execute()
    {
        //do smth
    }
}

Button(Rect rect, string text, ICommand cmd)
{
    cmd.Execute();
}