Si consideri il seguente esempio di codice:Perché le classi annidate sono "ereditate"?
class Outer
{
public class Nested { }
}
class SubOuter : Outer { }
class Test
{
Test()
{
Outer.Nested x; // Makes sense.
SubOuter.Nested y; // Compiles, but why?
}
}
Sembra che la classe annidata viene "ereditata" dal sottoclasse. Dov'è il punto in questo? Cosa posso fare con questa funzione che non posso (o non posso facilmente) fare diversamente? Non sono Outer.Nested
e SubOuter.Nested
esattamente equivalenti?
Chiarimento: Certo che compila perché il C# spec dice così. Lo capisco. Sto chiedendo perché C# è stato progettato in questo modo, dal momento che non sembra che aggiunga qualcosa alla lingua. Se hai un esempio in contrario, cioè un codice che diventa più facile/più breve/migliore usando questa funzione, ti preghiamo di condividerla in una risposta e la accetterò volentieri.
perché il 'Nested' è pubblico, quindi la classe' SubOuter' può vederlo nella classe base. –
Dov'è il problema, perché non vuoi che questo venga compilato. –
'Outer.Nested' e' SubOuter.Nested' sono equivalenti, non ci sono differenze in essi tranne il modo di dichiarazione. –