mercoledì 3 dicembre 2008

Nested class/ Inner class differenza fra C# e Java

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:

Lettori fissi