2

一般化されたメソッドにコールバック メソッドをパラメーターとして渡したいのですが、その方法がわかりません。で試してみましFunc<IAsyncResult>たが、互換性がないようです。

public void webRequest(string apiName, string requestMethod, string requestData, Func<IAsyncResult> callback)
{
    ...
    request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}

コールバックの署名は次のとおりです。

void GetRequestStreamCallback(IAsyncResult asyncResult)
4

2 に答える 2

4

Action<T>パラメータを の代わりにとして宣言しますFunc<T>

public void webRequest(string apiName, string requestMethod, string requestData, Action<IAsyncResult> callback)

Func<IAsyncResult>IAsyncResultパラメータを取らず、インスタンスを返す関数が必要です:

Func<TResult>デリゲート

パラメーターを持たないメソッドをカプセル化し、TResultパラメーターで指定された型の値を返します。

Action<T>何も返さず、パラメータを取るだけです:

Action<T>デリゲート

単一のパラメーターを持ち、値を返さないメソッドをカプセル化します。

于 2013-10-10T08:00:45.717 に答える
2

BeginGetRequestStream は、AsyncCallback 型のパラメーターを想定しています。そのため、コールバック パラメータがその型になるように宣言します。

public void webRequest(string apiName, string requestMethod, 
    string requestData,  AsyncCallback callback)
{
    ...
    request.BeginGetRequestStream(callback, request);
}

必要な署名と一致するため、コールバック メソッドを渡すことができます。

webRequest(apiName, requestMethod, requestData,
    GetRequestStreamCallback);
于 2013-10-10T08:13:32.200 に答える