new 关键字用于隐藏相同的基类实现。但是我不确定为什么下面的代码会产生 Baseclass 的输出
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();
}
}
我们在 derived2 中隐藏了 fun 的实现,但仍然调用了基类,为什么这样呢?我错过了什么吗?
最佳答案
Derived2.fun
是私有(private)的(它是类型成员的默认访问修饰符)。它在类之外是不可见的。只有在类外部可见的 fun
方法是 Baseclass.fun
才会被调用。
您需要使您的 Derived2.fun
在类外可见,以获得预期的输出。您可以通过将其公开/内部化来实现。
关于c# - 新的关键字和方法隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208180/