我不是那么伟大的C#。但我想了解BOT框架的这个代码。这里是方法不明白为什么消息不需要参数
namespace HotelBot.Dialogs
{
[Serializable]
public class GreetingDialog : IDialog
{
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("I am kiran");
context.Wait(MessageRecievedAsync);
}
public virtual async Task MessageRecievedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var message = await argument;
var userName = string.Empty;
context.UserData.TryGetValue<string>("Name", out userName);
if (string.IsNullOrEmpty(userName))
{
await context.PostAsync("What is your name");
userName = message.Text;
context.UserData.SetValue<string>("Name", userName);
}
else
{
await context.PostAsync(string.Format("Hi {0}. How can i help u?" + userName));
}
context.Wait(MessageRecievedAsync);
}
}
}
这行代码中调用这个方法
context.Wait(MessageRecievedAsync); // why no parameters are required
我想知道为什么不要求参数,该功能通过?
您忘记了正确标记问题。什么是IDialogContext?至于queston,'Wait()'方法可能有重载接受与'MessageReceivedAsync'方法类型相同的委托(参见[this](http://stackoverflow.com/q/2082615/1997232)问题),那么所有的需要的是提供*该方法的名称*(如果这是你的困惑),在'Wait'方法内部,某些参数会调用委托,所以最后**是**'MessageReceivedAsync(context,argument)'调用。 – Sinatr
您是否在派生类中基类对该方法有匹配的重载? – lokusking
@lokusking没有派生类 – Happy