传递方法作为参数

时间:2009-08-04 16:49:17

标签: c# asp.net

如何将方法作为参数传递? 我一直在Javascript中这样做,需要使用匿名方法来传递params。我如何在c#中完成?

protected void MyMethod(){
    RunMethod(ParamMethod("World"));
}

protected void RunMethod(ArgMethod){
    MessageBox.Show(ArgMethod());
}

protected String ParamMethod(String sWho){
    return "Hello " + sWho;
}

5 个答案:

答案 0 :(得分:13)

Delegates提供此机制。在C#3.0中为您的示例执行此操作的快速方法是使用Func<TResult> TResultstring和lambdas。

您的代码将成为:

protected void MyMethod(){
    RunMethod(() => ParamMethod("World"));
}

protected void RunMethod(Func<string> method){
    MessageBox.Show(method());
}

protected String ParamMethod(String sWho){
    return "Hello " + sWho;
}

但是,如果您使用的是C#2.0,则可以改为使用匿名委托:

// Declare a delegate for the method we're passing.
delegate string MyDelegateType();

protected void MyMethod(){
    RunMethod(delegate
    {
        return ParamMethod("World");
    });
}

protected void RunMethod(MyDelegateType method){
    MessageBox.Show(method());
}

protected String ParamMethod(String sWho){
    return "Hello " + sWho;
}

答案 1 :(得分:9)

您的ParamMethod类型为Func&lt; String,String&gt;因为它需要一个字符串参数并返回一个字符串(请注意,有角度括号中的最后一项是返回类型)。

所以在这种情况下,你的代码会变成这样:

protected void MyMethod(){
    RunMethod(ParamMethod, "World");
}

protected void RunMethod(Func<String,String> ArgMethod, String s){
    MessageBox.Show(ArgMethod(s));
}

protected String ParamMethod(String sWho){
    return "Hello " + sWho;
}

答案 2 :(得分:7)

答案 3 :(得分:4)

protected String ParamMethod(String sWho)
{
    return "Hello " + sWho;
}

protected void RunMethod(Func<string> ArgMethod)
{
    MessageBox.Show(ArgMethod());
}

protected void MyMethod()
{
    RunMethod( () => ParamMethod("World"));
}

() =>很重要。它会从Func<string>创建匿名Func<string, string>,即ParamMethod。

答案 4 :(得分:0)

protected delegate String MyDelegate(String str);

protected void MyMethod()
{
    MyDelegate del1 = new MyDelegate(ParamMethod);
    RunMethod(del1, "World");
}

protected void RunMethod(MyDelegate mydelegate, String s)
{
    MessageBox.Show(mydelegate(s) );
}

protected String ParamMethod(String sWho)
{
    return "Hello " + sWho;
}