0

私はオンラインで見つけたいくつかのコードを使用していますが、まだデリゲートをよく理解していません。それに関するいくつかの記事を読みましたが、私が見た例ははるかに単純化されており、あまり似ていません。これは私が問題を抱えているコードです:

var cb = new Action<OAuthAccessToken, TwitterResponse>(CallBackVerifiedResponse);
service.GetAccessToken(_requestToken, pinText.Text, CallBackVerifiedResponse);

オブジェクトはnew Action実際にCallBackVerifiedResponseメソッドを実行していますか、それとも 2 行目でのみ実行されていますか? OAuthAccessTokenTwitterResponseは、メソッドが要求するパラメーターのタイプですCallBackVerifiedResponseが、私には、どの時点でも初期化されているようには見えません。

誰かが私にこれらの2行を書くための説明または代替/より簡単な方法を提供できますか? 念のため、完全な方法を次に示します。

    void CallBackVerifiedResponse(OAuthAccessToken at, TwitterResponse response)
    {
        if (at != null)
        {
            SerializeHelper.SaveSetting<TwitterAccess>("TwitterAccess", new TwitterAccess
            {
                AccessToken = at.Token,
                AccessTokenSecret = at.TokenSecret,
                ScreenName = at.ScreenName,
                UserId = at.UserId.ToString()
            });
        }
    }
4

4 に答える 4

2

ない。内部のコードは、ある時点でメソッドGetAccessTokenを呼び出します。CallBackVerifiedResponseか否か。のコードによって異なりますGetAccessToken。応答が確認されたときに呼び出されると思います。

基本的に、デリゲートは誰かに関数を渡し、「後で必要なときにこの関数を呼び出してください」と言う方法です。

OAuthAccessTokenTwitterResponse内で初期化されますGetAccessToken。それが目標ですGetAccessToken- を非同期的に取得OAuthAccessTokenし、それが完了したときにそれについて通知することです。デリゲートの目的は、それを行うメカニズムを API に提供することです。

于 2012-06-20T14:54:26.870 に答える
1

簡単な例

DoWork(CallThisWhenFinished);


public void DoWork(Action action) //<--GetAccessToken
{
    MessageBox.Show("DoWork");
    action();
}

public void CallThisWhenFinished() //<--CallBackVerifiedResponse
{
    MessageBox.Show("CallMeWhenFinished");
}
于 2012-06-20T14:58:02.873 に答える
1

CallBackVerifiedResponse1 行目も 2 行目もメソッドを実行しません。どちらの場合も、そのメソッドのメソッド ポインターがメソッドに渡されます (1 行目ではActionコンストラクターに、2 行目ではGetAccessToken.

メソッドは、 のコードによって後で呼び出される場合がありますCallBackVerifierResponse

于 2012-06-20T14:52:47.827 に答える
0

デリゲートは、メソッドへの参照と考えることができます。

コード内:

service.GetAccessToken(_requestToken, pinText.Text, CallBackVerifiedResponse);

CallBackVerifiedResponseメソッドは実際には実行されません。後に括弧がある場合:

CallBackVerifiedResponse()その後、メソッドが実行されますが、括弧がなければ、メソッドへの参照が渡され、service.GetAccessToken()そのメソッドがメソッド自体を実行できるようになります。

于 2012-06-20T14:58:41.047 に答える