在C#和C ++中,是否可以使用相同的签名调用方法的基本版本和派生版本,而不是覆盖基类版本?
答案 0 :(得分:5)
在C#中,如果派生方法是覆盖,则不是,但如果标记为new
则为yes。但是在使用这个构造时你必须要小心,因为在大多数情况下,你的对象的消费者并不是真的会发生这种情况;
static class Program
{
static void Main()
{
Base baseObject = new Derived();
Derived derivedObject = new Derived();
Console.Write(derivedObject.Test());
Console.Write(baseObject.Test());
Console.Write(((Base)derivedObject).Test());
}
}
class Base
{
public virtual int Test()
{
return 1;
}
}
class Derived : Base
{
public new int Test()
{
return 2;
}
}
答案 1 :(得分:3)
对于C ++,您可以使用范围解析运算符:
Derived d;
d.Base::Method();