调用我的函数我作为参数传递

时间:2013-09-18 22:19:05

标签: c# delegates

我有一个功能:

public void Callback()
{
    // Does some stuff
}

我想把它传递给另一个函数,然后将它传递给另一个函数,然后执行函数......到目前为止我有这个:

public void StartApp() // entry point
{
    StartMyAwesomeAsyncPostRequest( Callback );
}

public void StartMyAwesomeAsyncPostRequest( Delegate callback )
{
    // Work out some stuff and start a post request
    TheActualAsyncPostRequest( callback );
}

public void TheActualAsyncPostRequest( Delegate callback )
{
    // Do some jazz then run the delegated function
    callback();
}

我查看了一些其他的例子,但是来自PHP和javascript背景,我正在努力解释,你能不能给我一个特定于我的请求的例子或解释?提前谢谢!

1 个答案:

答案 0 :(得分:7)

尝试将参数类型声明为委托的特定种类。在这种情况下,由于您的回调不接受任何参数并且不返回任何结果,请使用Action

public void StartMyAwesomeAsyncPostRequest(Action callback)
{
    TheActualAsyncPostRequest(callback);
}

public void TheActualAsyncPostRequest(Action callback)
{
    callback();
}

如果您希望能够将参数传递给回调,请使用Action<T>(或其众多堂兄之一,传递多个参数):

public void StartMyAwesomeAsyncPostRequest(Action<string> callback)
{
    TheActualAsyncPostRequest(callback);
}

public void TheActualAsyncPostRequest(Action<string> callback)
{
    callback("Foo");
}

或者要从回调中获得结果,请使用Func<T>(或其众多堂兄之一,传入任何参数):

public void StartMyAwesomeAsyncPostRequest(Func<string> callback)
{
    TheActualAsyncPostRequest(callback);
}

public void TheActualAsyncPostRequest(Func<string> callback)
{
    string result = callback();
}