怎么方法隐藏在工C#?
-
22-08-2019 - |
题
为什么以下程序的指纹
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类,像这样:
new void Print()
{
Console.WriteLine("B");
}
它开始打印
A
B
?
解决方案
当您删除public
访问修饰符,删除任何从new Print()
函数调用B的Main
方法,因为它现在默认为private
能力。它不再进入主。
剩下的唯一选择就是后退到从A继承了方法,因为这是唯一的访问执行。如果你是从另一个调用B法中打印(),你会得到B的实施,因为B的成员将看到私有实现。
其他提示
你使Print
方法private
,所以唯一可用的方法Print
是继承一个。
在外部,新B.Print() - 方法是不可见的了,所以A.Print()被调用
。在类,虽然,新B.Print-方法仍是可见的,所以这是由在相同的类中的方法称为一个。
当你删除的关键公共从b类中,新的打印的方法是不再提供类外的,所以当你做b。从你的主要程序,它实际上使一个电话到公共的方法提供一个(由于b继承一个和一个仍然具有印刷作为公共)
如果没有公开关键字,则该方法是私有的,因此不能由主叫()。
然而Print2()即使私有方法可以调用它,因为它可以看到它自己的类的其他方法。
不隶属于 StackOverflow