我正在使用我在网上找到的一些代码,但我还不太了解代表。我读了一些关于它的文章,但我看到的例子更简单,也不是很相似。这是我遇到问题的代码:
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()
});
}
}
答案 0 :(得分:2)
都不是。 GetAccessToken
内的代码会在某个时刻调用CallBackVerifiedResponse
方法。或不。取决于GetAccessToken
中的代码。我认为它会在响应得到验证后调用它。
基本上,委托是一种向某人提供功能的方式,并说“在需要时稍后再调用此函数”。
OAuthAccessToken
和TwitterResponse
在GetAccessToken
内初始化。这就是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()
,以便该方法可以自己执行该方法。