次のコードでは、オーバーロードされたメソッドがあります。1つはClazzA型のパラメーターを取り、もう1つはClazzB型のパラメーターを取ります。示されているコードでは、最初のGetDescriptionメソッド(ClazzAをパラメーターとして受け取るメソッド)が呼び出されます。私はその理由を理解していると思います。
私の質問は、基になるオブジェクトがクラスB型の場合(各オブジェクトを検査してclazzBにキャストする必要なしに)、clazzBを最初に呼び出すメソッドを使用するエレガントな方法はありますか?
public class ClazzA
{
public virtual string Descr { get { return "A"; } }
}
public class ClazzB : ClazzA
{
public override string Descr { get { return "B"; } }
}
public static class test
{
public static void Main()
{
ClazzA test = new ClazzB();
GetDecription(test);
}
public static void GetDecription(ClazzA someClazz)
{
Debug.WriteLine("I am here");
}
public static void GetDecription(ClazzB someClazz)
{
Debug.WriteLine("I want to be here");
}
}
出力:「私はここにいます」
'test'はClassB型なので、2番目のメソッドを呼び出したいと思います。現在、私が持っている唯一の2つの解決策は次のとおりです。
if(test is ClazzB)return GetDescription((ClazzB)test);
また
- ClassAでもほぼ同じことを行います...タイプを確認し、2番目のメソッドに委任します
これらは両方とも、オブジェクトのタイプを判別するためにオブジェクトを検査する必要があります