为什么打印以下程序
B B
(正如它应该)
public class A { public void Print() { Console.WriteLine("A"); } } public class B : A { public new void Print() { Console.WriteLine("B"); } public void Print2() { Print(); } } class Program { static void Main(string[] args) { var b = new B(); b.Print(); b.Print2(); } }
但如果我们删除B类中的关键字'public',就像这样:
new void Print() { Console.WriteLine("B"); }
它开始打印
A B
?
当你删除public
访问修饰符时,你删除任何new Print()
从Main
函数调用B的方法的能力,因为它现在默认为private
.Main不再可以访问它了.
唯一剩下的选择是回退到从A继承的方法,因为这是唯一可访问的实现.如果您要从另一个B方法中调用Print(),您将获得B实现,因为B的成员将看到私有实现.
您正在制作该Print
方法private
,因此唯一可用的Print
方法是继承方法.