私はAudioRequest
またはVideoRequest
のオブジェクトを持っています。どちらのクラスもRequest
から継承します。私はこのクラスを持っている:パラメータのタイプに基づいた呼び出し方法
public static DoThings
{
public static void HandleRequest(AudioRequest r)
{
// Do things.
}
public static void HandleRequest(VideoRequest r)
{
// Do things.
}
}
私はr
がVideoRequest
またはAudioRequest
のいずれであってもよく、それが正しいものを呼び出すことができますどこDoThings.HandleRequest(r)
を呼び出すことができるようにしたいです。それは可能ですか?私は*Request
クラスを制御できないので、何もできません。私はクラスとHandleRequest
というコードを管理しています。これは、それを呼び出すコードで、それはWebAPIのである:
public Response Post(Request input)
{
return DoThings.HandleRequest(input);
}
上記のコードはエラーArgument 1: cannot convert from 'Request' to 'AudioRequest'
を与えます。
私が掃除された元のコードは、この持っていた:
if (input.GetType() == typeof(AudioRequest))
{
var audioRequest = (AudioRequest)input;
DoThings.HandleRequest(audioRequest);
}
else if (input.GetType() == typeof(VideoRequest))
{
var videoRequest = (VideoRequest)input;
DoThings.HandleRequest(videoRequest);
}
をしかし、私はこれを行うにはクリーンな方法があった考え出しました。
オーバーロードには、AudioRequest型のパラメータと、VideoRequest型のパラメータを持つパラメータが必要です。 – EvilTak
確かにそれは2つの同じ機能を持つタイプミスですか?そのうちの1人は 'VideoRequest'引数を受け入れます。そうしないと、コンパイルエラーが発生します。 –
おっと、私の間違いです。はい、もう1つはVideoRequestです。 – vkapadia