Nested o Inner class sono classi definite all'interno del corpo di un'altra classe (Outer class).
Per una introduzione sulle Nested class in C# vedere il post precedente.
Diciamo subito una cosa:
In C# esiste solo il concetto di Nested class, mentre in Java esistono sia le Nested class sia le Inner class.
In Java:
Vediamo che differenza c'è fra Inner class e Nested class in Java: le Nested class sono delle Inner class statiche.
Inner class:
public class OuterClass{
public class InnerClass{
}
}
Nested class:
public class OuterClass{
public static class NestedClass{
}
}
La differenza è la stessa che c'è fra un metodo statico o non statico...
L'istanza di una inner class appartiene ad un'istanza della outer class, mentre l'istanza di una nested class non ha un'istanza associata.
L'inner class si invoca così:
OuterClass outer =new
OuterClass(); OuterClass.InnerClass inner = outer.new
OuterClass.InnerClass();
La nested class si invoca così:
OuterClass.NestedClass nested = new OuterClass.NestedClass();
Si noti che la Inner class ha accesso a tutti i metodi/variabili della Outer class, anche se definiti privati. Questo perchè p intimamente legata all'instanza della Outer class da cui è stata creata.
La Nested class invece, può accedere solo ai metodi/variabili static della Outer class.
In C#
La Nested class di C# ha lo stesso significato semantico della Nested class di java: è una classe statica definita dentro un'altra classe. La differenza è, se vogliamo, solo sintattica: infatti in C# viene omesso il modificatore "static" ed una Nested class si definisce così:
public class OuterClass
{
public class NestedClass {
}
}
Anche in questo caso la Nested class può accedere solo ai metodi static della Outer class.
Ricordo ancora che il concetto di Inner class in C# non è previsto.
Nessun commento:
Posta un commento