mercoledì 3 dicembre 2008

Nested class in C#

Una Nested class è una classe definita all'interno del codice di un'altra classe (Outer class).


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:

Lettori fissi