私はc#アプリケーションを持っています。アプリケーションの実行の2つの異なるステップでアプリケーションの状態を表す2つの異なるクラス(Step1.StateおよびStep2.State )( IMDP.IStateと呼ばれる同じインターフェイスを実装しています)があります。アプリケーションの状態を更新するためのオーバーロードされたメソッドが 2 つあります。
メソッドの 1 つに次のコードがあります。
Step1.State s1s = null;
Step2.State s2s = null;
次に、そのタイプに応じて現在の状態をキャストしています。currentStateは、パラメーターとして受け取る実装済みインターフェースのインスタンスです。まず、動的型に格納しています。
//currentState is instance of IMDP.IState interface which is
//implemented by the two states
dynamic curState=currentState;
if(curState is Step1.State)
{
s1s = (Step1.State)currentState;
curState = s1s;
}
else if (curState is Step2.State)
{
s2as = (Step2.State)currentState;
curState = s2s;
}
次に、オーバーロードされたメソッドを同じメソッド内で呼び出しています。
currentState = myAgent.UserStateUpdate(prevAction, curState, e.Result);
UserStateUpdateメソッドには 2 つのオーバーロードされたバージョンがあります。1 つ目はStep1.Stateを取得し、2 つ目はStep2.Stateを差別化パラメーターとして取得します。次のように。
IMDP.IState UserStateUpdate(IMDP.IAction act, Step1.State st, RecogResult rr)
IMDP.IState UserStateUpdate(Step2.Abuse.Action act, Step2.State st, RecogResult rr)
アプリケーションはStep1.Stateの正しいメソッドを呼び出しますが、アプリケーションが状態表現にStep2.Stateを使用する Step2 に移動するとき。次の例外をスローします。オーバーロードされたメソッドを呼び出す前にcurState (動的に型指定) に格納されているものを確認すると、Step2.Stateと型指定された正しい状態が表示されることに注意してください。
" 'BI4A.Agent.Agent.UserStateUpdate(BI4A.IMDP.IAction, BI4A.Step1.State, System.Speech.Recognition.RecognitionResult)' に最適なオーバーロードされたメソッドの一致には、無効な引数が含まれています"
これは基本的に、システムが Step2.State の代わりに Step1.State を受け入れるオーバーロードされたメソッドを呼び出そうとしていることを示しています。正しいメソッドを呼び出す方法がわかりませんでした。助けてくれてありがとう。