传递未知类型的参数
本文关键字:参数 类型 未知 | 更新日期: 2023-09-27 18:01:30
如何在Action委托中传递未知类型的参数?
Button b1 = new Button("HI!", Class.method);
在类中:
Action doAction;
string text;
public Button(string Message, Action func)
{
text = Message;
doAction = func;
}
public void Clicked()
{
doAction();
}
我想实现的是,我可以在函数中传递参数时添加一个按钮:
Button b2 = new Button("HI!", Class.method(unknown_parameter));
谢谢。
编辑:我听说过Action<T>
的一些东西,但我真的不清楚。
Class.method(unknown_parameter)
中的括号将尝试调用该函数,因此您不能像这样传递参数。相反,您必须同时传递参数,并在函数内执行方法。
你可以这样做,例如使用泛型:
class Button<T>
{
public Button (string message, Action<T> func, T param)
{
func(param); // calls the method
}
}
new Button<string>("foo", Class.method, "bar");
你也可以传入一个lambda表达式,它调用方法:
class Button
{
public Button (string message, Action func)
{
func(); // calls the function
}
}
new Button("foo", () => Class.method("bar"));
如果您根本不知道类型是什么,您可以使用"Action
public Button(string Message, Action<object> func)
{
text = Message;
doAction = func;
}
public void Clicked(object o)
{
doAction(o);
}
但是…挑战在于如何处理"doAction"中的未知类型。有很多方法可以解决这个问题,但是为了真正能够推荐怎么做,我认为我们需要看到一些例子来说明未知参数是从哪里来的。通常我们有一些关于可能的类型在做什么的想法