代表是如何执行的?

时间:2012-06-20 14:50:17

标签: c# delegates

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

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

new Action对象实际上是在执行CallBackVerifiedResponse方法,还是只在第二行发生? OAuthAccessTokenTwitterResponseCallBackVerifiedResponse方法要求的参数类型,但对我而言,它看起来不像是在任何时候进行初始化。

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

    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 个答案:

答案 0 :(得分:2)

都不是。 GetAccessToken内的代码会在某个时刻调用CallBackVerifiedResponse方法。或不。取决于GetAccessToken中的代码。我认为它会在响应得到验证后调用它。

基本上,委托是一种向某人提供功能的方式,并说“在需要时稍后再调用此函数”。

OAuthAccessTokenTwitterResponseGetAccessToken内初始化。这就是GetAccessToken的目标 - 异步获取OAuthAccessToken并在完成后告诉您。{1}}。委托的目的是为API提供一种机制来实现这一目标。

答案 1 :(得分:1)

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

稍后可以通过CallBackVerifierResponse中的某些代码调用该方法。

答案 2 :(得分:1)

一个简单的例子

DoWork(CallThisWhenFinished);


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

public void CallThisWhenFinished() //<--CallBackVerifiedResponse
{
    MessageBox.Show("CallMeWhenFinished");
}

答案 3 :(得分:0)

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

在代码中:

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

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

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