为什么以下程序的指纹

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()即使私有方法可以调用它,因为它可以看到它自己的类的其他方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top