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

?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top