传递未知类型的参数

时间:2014-05-04 14:14:00

标签: c# methods

如何在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时在函数中传递参数:

Button b2 = new Button("HI!", Class.method(unknown_parameter));

感谢。

编辑:我已经听说Action<T>的某些内容,但我真的不清楚。

2 个答案:

答案 0 :(得分:2)

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"));

答案 1 :(得分:2)

如果您根本不知道该类型的类型,您可以使用&#34; Action&lt; object&gt;&#34;在这种情况下,代码看起来像这样:

public Button(string Message, Action<object> func)
{
    text = Message;
    doAction = func;
}

public void Clicked(object o)
{
    doAction(o);
}

但是......挑战将是如何处理内部未知类型&#34; doAction&#34;。有很多方法可以解决这个问题,但是我真的能够建议做什么我认为我们需要看一些未知参数来自哪里的例子。通常情况下,我们对某些了解可能的类型正在做什么。