質問

なぜ、次のプログラムを印刷

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()するためMain関数からBのprivateメソッドを呼び出すためのあらゆる機能を削除。それがメインにアクセスできなくなっのです。

それが唯一のアクセス可能な実装であるように、

唯一の残りのオプションは、バックAから継承されたメソッドに入ることです。あなたが別のBメソッド内からの印刷を()を呼び出すとしたらBのメンバーがプライベート実装を見るであろうので、あなたは、Bの実装を得るでしょう。

他のヒント

あなたはPrintメソッドprivateを作っているので、のみ利用可能Printメソッドは継承されたものです。

外部、新しいB.Print() - メソッドはもう見えないので、A.Print()が呼び出される

クラス内で、しかし、新しいB.Print法は、その結果は、同じクラス内のメソッドによって呼び出されるものだが、まだ表示されます。

あなたは、クラスBからキーワード公衆を削除すると、新しい印刷方法は、クラス外で使用できなくなり、そしてあなたがあなたのメインプログラムからb.printを行うときに、それは実際にAでのパブリック・メソッドの呼び出しが利用できるようにします(bは継承し、まだ公共などの印刷を持っているので)

publicキーワードがなければ、その後方法は)ので、メイン(で呼び出すことはできません、プライベートでます。

それはそれ自身のクラスの他の方法を見ることができるように

しかしPRINT2()メソッドでもプライベートた場合、それを呼び出すことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top