在下面的代码中,我有一个重载方法,一个采用 ClazzA 类型的参数,另一个采用 ClazzB 类型的参数。在所示代码中,调用了第一个 GetDescription 方法(以 ClazzA 作为参数的方法)。我想我明白为什么。
我的问题是..如果底层对象的类型为 classB(无需检查每个对象并将其转换为 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");
}
}
输出:“我在这里”
我真的希望调用第二种方法,因为“测试”是 ClassB 类型。目前我仅有的两个解决方案是:
if (test is ClazzB) return GetDescription( (ClazzB) test );
或者
- 在 ClassA 中做几乎相同的事情...检查类型并委托给第二个方法
这两者都需要检查对象以确定其类型