Domanda

Perché le seguenti stampe del programma

B
B

(come dovrebbe)

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

, ma se togliamo parola chiave 'pubblico' in classe B in questo modo:

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

si avvia la stampa

A
B

È stato utile?

Soluzione

Quando si rimuove il modificatore di accesso public, di rimuovere qualsiasi possibilità di chiamare il metodo new Print() di B dalla funzione Main perché ora default private. Non è più accessibile alla principale.

L'unica opzione rimasta è quella di ripiegare al metodo ereditato da A, come quella è l'unica implementazione accessibile. Se si dovesse chiamare Print () dall'interno di un altro metodo B si otterrebbe l'attuazione B, perché i membri di B avrebbero visto l'attuazione privata.

Altri suggerimenti

Stai facendo il metodo Print private, quindi l'unico metodo Print disponibile è quello ereditato.

Esternamente, il nuovo B.Print () - metodo non è visibile più, così A.Print () viene chiamato

.

All'interno della classe, però, il nuovo B.Print-metodo è ancora visibile, in modo che è quello che viene chiamato con metodi nella stessa classe.

quando si rimuove il pubblico parola chiave dalla classe B, il nuovo metodo di stampa non è più disponibile al di fuori della classe, e così quando si fa b.print dal programma principale, si rende di fatto una chiamata al metodo pubblico disponibile in A (perché B eredita una e ha ancora Stampare come pubblico)

Senza la parola chiave pubblica, allora il metodo è privata, pertanto, non può essere chiamato da main ().

Tuttavia la Print2 () metodo può chiamare come si può vedere altri metodi della sua propria classe, anche se privato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top