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
액세스 수정 자, B를 호출하는 능력을 제거합니다. new Print()
.의 방법 Main
이제 기본값으로 기능합니다 private
. 더 이상 메인에 접근 할 수 없습니다.
나머지 옵션은 유일하게 액세스 가능한 구현이므로 A에서 상속 된 메소드로 돌아가는 것입니다. 다른 B 메소드 내에서 print ()을 호출하려면 B의 구성원이 개인 구현을 볼 수 있기 때문에 B 구현을 얻게됩니다.
다른 팁
당신은 Print
방법 private
, 유일한 것은 사용 가능합니다 Print
방법은 상속 된 방법입니다.
외부에서는 새로운 b.print ()-메소드가 더 이상 보이지 않으므로 A.print ()가 호출됩니다.
그러나 클래스 내에서 새로운 B.print-method는 여전히 볼 수 있으므로 동일한 클래스의 메소드에 의해 호출되는 것입니다.
클래스 B에서 키워드 공개를 제거하면 새로운 인쇄 방법을 클래스 밖에서 더 이상 사용할 수 없으므로 메인 프로그램에서 B.print를 할 때 실제로 A에서 공개 메소드를 호출합니다 (B 때문에 B 때문에 공개 메소드가 가능합니다. 상속 A와 A는 여전히 공개적으로 인쇄되어 있습니다)
공개 키워드가 없으면 메소드는 비공개이므로 main ()에서 호출 할 수 없습니다.
그러나 print2 () 메소드는 비공개이더라도 자체 클래스의 다른 방법을 볼 수 있으므로 호출 할 수 있습니다.