我只是找不到令人满意的解释。所以我认为在 SO 上发布这个会有所帮助。
当我们结合时会发生什么method hiding and overriding in C# ?
对于以下示例:
class BaseClassA
{
public virtual void showMessage()
{
Console.WriteLine("In BaseClass A ");
}
}
class DerivedClassB : BaseClassA
{
public override void showMessage()
{
Console.WriteLine("In DerivedClass B ");
}
}
class DerivedClassC : DerivedClassB
{
public new void showMessage()
{
Console.WriteLine("In DerivedClass C");
}
}
class Program
{
static void Main(string[] args)
{
BaseClassA a = new BaseClassA();
a.showMessage();
a = new DerivedClassB();
a.showMessage();
BaseClassA b = new DerivedClassC();
b.showMessage();
Console.ReadKey();
}
}
我理解的输出
BaseClassA b = new DerivedClassC();
b.showMessage();
这是我对C#new
的理解override
New
- 它隐藏了基类方法。因此,即使基类引用变量指向派生类对象,如果派生类隐藏了方法,输出也将只是基类输出。
Override
- 它覆盖了基类方法。因此,即使基类引用变量指向派生类对象,如果派生类覆盖该方法,输出也将是派生类输出。
但是这里怎么可能连BaseClassA
引用变量都指向一个DerivedClassC
对象并打印DerivedClassB
输出呢?
请用简单的话解释一下。