どのようにメソッドの隠蔽は、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()
するためMain
関数からBのprivate
メソッドを呼び出すためのあらゆる機能を削除。それがメインにアクセスできなくなっのです。
唯一の残りのオプションは、バックAから継承されたメソッドに入ることです。あなたが別のBメソッド内からの印刷を()を呼び出すとしたらBのメンバーがプライベート実装を見るであろうので、あなたは、Bの実装を得るでしょう。
他のヒント
あなたはPrint
メソッドprivate
を作っているので、のみ利用可能Print
メソッドは継承されたものです。
外部、新しいB.Print() - メソッドはもう見えないので、A.Print()が呼び出される
。クラス内で、しかし、新しいB.Print法は、その結果は、同じクラス内のメソッドによって呼び出されるものだが、まだ表示されます。
あなたは、クラスBからキーワード公衆を削除すると、新しい印刷方法は、クラス外で使用できなくなり、そしてあなたがあなたのメインプログラムからb.printを行うときに、それは実際にAでのパブリック・メソッドの呼び出しが利用できるようにします(bは継承し、まだ公共などの印刷を持っているので)
publicキーワードがなければ、その後方法は)ので、メイン(で呼び出すことはできません、プライベートでます。
それはそれ自身のクラスの他の方法を見ることができるようにしかしPRINT2()メソッドでもプライベートた場合、それを呼び出すことができます。
所属していません StackOverflow