Ad esempio:
class OuterClass
{
class NestedClass {
}
}
Come usare la Nested class dall'esterno
La classe interna può essere referenziata dall'esterno in questo modo:
OuterClass. NestedClass myObj = new OuterClass. NestedClass();//non compila perchè NestedClass è private
ma solo se è definita public!! ( Il valore di default dell'access modifier di una nested class è private). Dunque la precedente riga di codice non compila a meno di definire così la nested class:
class OuterClass
{
public class NestedClass {
}
}
Ora si può usare con successo:
OuterClass. NestedClass myObj = new OuterClass. NestedClass();//ok!!
Nota, si potrebbe essere tentati di usare un'istanza della outer class per definire la nested class, come in questa chiamata, ma non è corretto dato che è come se la nested class fosse un membro statico della outer:
OuterClass. NestedClass myObj =(new OuterClass()).NestedClass(); //non compila, non si può chiamare in questo modo.
Come usare usare la Outer class dall'interno della Nested class
Il principale motivo per cui si inserisce una classe dentro un'altra è quello di utilizzare membri e variabili della Outer class dall'interno della Nested class.
Attenzione: dalla Nested class si possono utilizzare solo i membri static della Outer class!!!
La sintassi è questa: OuterClass.membro
class OuterClass
{
private string myOuterString;
private static string myOuterStaticString;
public class NestedClass {
public void Method() {
OuterClass.myOuterStaticString="ciao";//ok!
OuterClass.myOuterString = "ciao";//No, questa riga non compila, dato che myOuterString non è static
}
}
}
Nota che la Nested class accede ai membri della Outer class anche se questi sono privati!!! Questa è la grande potenza delle nested class e l'unico motivo per cui andrebbero usate.
Nessun commento:
Posta un commento