Pregunta

¿Por qué los siguientes programa imprime

B
B

(como debería)

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();
        }
    }

pero si quitamos la palabra clave 'pública' en la clase B, así:

    new void Print()
    {
        Console.WriteLine("B");
    }

se inicia la impresión

A
B

¿Fue útil?

Solución

Cuando se quita el modificador de acceso public, se elimina cualquier posibilidad de llamar al método de new Print() B de la función Main porque ahora por defecto private. Ya no se puede acceder a la información principal.

La única opción que queda es volver a caer al método heredado de A, ya que es la única aplicación accesible. Si se va a llamar de impresión () dentro de otro método B se llega a la aplicación B, porque los miembros de B verían la implementación privada.

Otros consejos

Usted está haciendo el método Print private, por lo que el único método disponible es el Print heredado uno.

Externamente, el nuevo B.Print () - Método no es visible más, así A.Print () se llama

.

Dentro de la clase, sin embargo, el nuevo B.Print método es aún visible, de modo que es el que es llamado por los métodos de la misma clase.

cuando se quita la palabra clave public de la clase B, el nuevo método de impresión ya no está disponible fuera de la clase, y así cuando haces b.print de su programa principal, lo que realmente hace una llamada al método público disponible en una (b porque hereda una y una impresión aún tiene como público)

Sin la palabra clave pública entonces el método es privada, por lo tanto, no puede ser llamado por main ().

Sin embargo, el Print2 () puede llamar como se puede ver otros métodos de su propia clase, aunque privada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top