为什么这段代码会产生输出“Base class”而不是“Derived2 class”?
namespace TestConsoleApplication
{
class Baseclass
{
public void fun()
{
Console.Write("Base class" + " ");
}
}
class Derived1: Baseclass
{
new void fun()
{
Console.Write("Derived1 class" + " ");
}
}
class Derived2: Derived1
{
new void fun()
{
Console.Write("Derived2 class" + " ");
}
}
class Program
{
public static void Main(string[ ] args)
{
Derived2 d = new Derived2();
d.fun();
}
}
}
最佳答案
因为您没有将该方法声明为公共(public)的。
您已经告诉它隐藏原始定义,而不是覆盖它 - 它会做,但默认访问修饰符是private,不是公开的。
例如,当从 Derived2
中调用方法时:
class Derived2 : Derived1
{
new void fun()
{
Console.Write("Derived2 class" + " ");
}
public void Test()
{
fun();
}
}
class Program
{
public static void Main(string[] args)
{
Derived2 d = new Derived2();
d.Test(); //Prints 'Derived2 class'
}
}
将其设置为 public 确实会在您的原始示例中打印 Derived2
public new void fun()
{
Console.Write("Derived2 class" + " ");
}
关于c# - 关于继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606471/