C# 传递未知类型的参数
如何在动作委托中传递未知类型的参数C# 传递未知类型的参数,c#,methods,C#,Methods,如何在动作委托中传递未知类型的参数 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 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));
谢谢
编辑:我听说过一些关于
操作的东西,但我真的不清楚。类中的括号。方法(未知参数)
将尝试调用函数,因此不能像那样传递参数。相反,您还必须传递参数,并在函数中执行该方法
例如,您可以使用泛型来实现这一点:
class Button<T>
{
public Button (string message, Action<T> func, T param)
{
func(param); // calls the method
}
}
new Button<string>("foo", Class.method, "bar");
如果您根本不知道类型是什么,可以使用“Action”,在这种情况下,代码如下所示:
public Button(string Message, Action<object> func)
{
text = Message;
doAction = func;
}
public void Clicked(object o)
{
doAction(o);
}
public按钮(字符串消息,动作函数)
{
文本=消息;
doAction=func;
}
已单击公共空(对象o)
{
作用(o);
}
但是。。。挑战将是如何处理“doAction”中的未知类型。解决这个问题的方法有很多种,但是为了真正能够推荐应该做什么,我认为我们需要看看未知参数来自哪里的一些例子。通常,我们对可能的类型有一些想法。根据您的需要,可以使用type
Object
、dynamic
或泛型。您的第二个解决方案似乎是更好的选择。
public Button(string Message, Action<object> func)
{
text = Message;
doAction = func;
}
public void Clicked(object o)
{
doAction(o);
}