-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



sabato 15 novembre 2008

Singleton class in c#

Quando hai bisogno di creare una classe che ha una sola istanza nella tua applicazione occorre creare una singleton class.

In c# con l'inizializzazione statica è semplice:

public sealed class Singleton

    {

        private static readonly Singleton instance = new Singleton();

 

        private Singleton() { }

 

        public static Singleton Instance

        {

            get

            {

                return instance;

            }

        }

    }



Mettendo a readonly la variabile privata statica instance verrà inizializzata solo o in un costruttore statico o in una inizializzazione statica (come in questo caso).

L'istanziazione della classe avverrà solo quando verrà chiamata la proprietà pubblica instance.

La classe è sealed per evitare di creare istanze dalle classi derivate.


Lavorare in ambiente multithreaded ed assicurarti la thread safety

Con questo approccio ci assicuriamo che venga creata una sola istanza e soltanto quando necessario.
La variabile è volatile per permettere di accederci una volta completato l'assegnamento alla variable stessa.
Per evitate deadlock si utilizza una istanza di un oggetto (syncRoot) sul lock.


using System;

 

public sealed class Singleton

{

    private static volatile Singleton instance;

    private static object syncRoot = new Object();

 

    private Singleton() { }

 

    public static Singleton Instance

    {

        get

        {

            if (instance == null)

            {

                lock (syncRoot)

                {

                    if (instance == null)

                        instance = new Singleton();

                }

            }

 

            return instance;

        }

    }

}

Nessun commento: