我有以下代码.任何人都可以回答为什么调用base-show方法而不是在这种情况下调用derive-show.在这种情况下,如何为derive和基类的show函数进行内存分配.
class OverrideAndNew : Derive
{
public static void Main()
{
Derive obj = new Derive1();
obj.Show();
Console.ReadLine();
}
}
class Base
{
public virtual void Show()
{
Console.WriteLine("Base - Show");
}
}
class Derive : Base
{
protected virtual void Show()
{
Console.WriteLine("Derive - Show");
}
}
class Derive1 : Derive
{
protected override void Show()
{
Console.WriteLine("Derive1 - Show");
}
}
Run Code Online (Sandbox Code Playgroud)
因为你打电话给它.覆盖方法时,无法修改访问修饰符.所以基本上,Derive1超越了Derive的Show方法.但是从来没有超过Base的那个.所以只有一个公共Show方法,一个在Base中实现.
你可能想做的是:
class OverrideAndNew
{
public static void Main()
{
Derive obj = new Derive1();
obj.Show();
Console.ReadLine();
}
}
class Base
{
public virtual void Show()
{
Console.WriteLine("Base - Show");
}
}
class Derive : Base
{
public override void Show()
{
Console.WriteLine("Derive - Show");
}
}
class Derive1 : Derive
{
public override void Show()
{
Console.WriteLine("Derive1 - Show");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,方法签名保持不变.它总是公开的,因为Base说它必须是公开的.它总是相同的名称,返回类型和参数(在这种情况下没有).