传递具有不同参数的操作
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();
}
我在 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();
}