私は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'とは何ですか?クエストオンの場合、 'Wait()'メソッドはおそらく 'MessageReceivedAsync'メソッドと同じ型のデリゲートを受け入れるオーバーロードを持っています([this](http://stackoverflow.com/q/2082615/1997232)の質問を参照)。 'Wait'メソッドの中に何らかのパラメータを使ってデリゲートを呼び出すので、最後に** MessageReceivedAsync(context、argument)'コールが*メソッドの名前*を渡す必要があります。 – Sinatr
ベースクラスのメソッドが一致する派生クラスにありますか? – lokusking
@lokuskingは派生クラスではありません – Happy