传递未知类型的参数

本文关键字:参数 类型 未知 | 更新日期: 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"中的未知类型。有很多方法可以解决这个问题,但是为了真正能够推荐怎么做,我认为我们需要看到一些例子来说明未知参数是从哪里来的。通常我们有一些关于可能的类型在做什么的想法