Como método de esconder funciona em C #?
-
22-08-2019 - |
Pergunta
Por que as seguintes impressões programa
B
B
(como deveria)
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();
}
}
mas se remover palavra-chave 'pública' na classe B assim:
new void Print()
{
Console.WriteLine("B");
}
que começa a imprimir
A
B
?
Solução
Quando você remove o modificador de acesso public
, você remover qualquer capacidade de método new Print()
chamada de B a partir da função Main
porque agora o padrão é private
. Não é mais acessível a principal.
A única opção restante é a cair de volta para o método herdado de A, como é que a implementação somente acessível. Se você fosse para chamar Imprimir () de dentro de outro método B que se obtém a implementação B, porque os membros B veria a implementação privado.
Outras dicas
Você está fazendo o Print
método private
, então o método Print
só está disponível é a que herdou.
Externamente, o novo B.Print (.) - método não é mais visível, de modo A.Print () é chamado
Dentro da classe, no entanto, o novo B.Print-método é ainda visível, de modo que é o que é chamado por métodos na mesma classe.
quando você remove a palavra-chave público de classe b, o novo método de impressão não está mais disponível fora da classe, e assim quando você faz b.print de seu programa principal, ele realmente faz uma chamada para o método público disponível em Um (porque B herda uma e um ainda tem Print as público)
Sem a chave pública, em seguida, o método é privado, portanto, não pode ser chamado de Main ().
No entanto, o Print2 () método pode chamá-lo, pois ele pode ver outros métodos de sua própria classe, mesmo se privado.