0

我正在使用一些我在网上找到的代码,但我还不太了解代表。我读了一些关于它的文章,但我看到的例子更加简单,而且不是很相似。这是我遇到问题的代码:

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

new Action对象实际上是在执行该CallBackVerifiedResponse方法还是仅在第二行中发生?OAuthAccessToken并且TwitterResponse是该CallBackVerifiedResponse方法要求的参数的类型,但在我看来,它们在任何时候都没有被初始化。

有人可以给我一个解释或替代/更简单的方式来写这两行吗?这是以防万一的完整方法:

    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

第一行和第二行都不执行该CallBackVerifiedResponse方法。在这两种情况下,该方法的方法指针都会传递给一个方法(在第一行中,传递给Action构造函数,在第二行中,传递给GetAccessToken.

该方法稍后可能会被CallBackVerifierResponse.

于 2012-06-20T14:52:47.827 回答
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 回答
0

您可以将委托视为对方法的引用。

在代码中:

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

CallBackVerifiedResponse方法实际上并未执行。如果后面有括号:

CallBackVerifiedResponse()然后该方法将被执行,但没有括号,它将传递对该方法的引用,service.GetAccessToken()以便该方法可以执行该方法本身。

于 2012-06-20T14:58:41.047 回答