Come metodo di nascondersi funziona in C #?
-
22-08-2019 - |
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
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.