Blog di Andrea Soldano

"I have a dream ..."
posts - 53, comments - 263, trackbacks - 18

My Links

News








Tag Cloud

Archives

Post Categories

I miei siti

Sicuri di aver creato un'unica istanza della Vostra classe ...

Spesso l’istanza di una classe deve essere creata una volta in tutto il progetto.

E’ possibile creare all’interno della classe stessa un metodo “GetInstance” che ritorna una variabile shared la quale punta all’unica istanza. Esempio:

 

Namespace BusinessLogicLayer

Public Class MiaClasse

    Shared pInstance As MiaClasse

 

    Public Shared Function GetInstance() As MiaClasse

        If pInstance Is Nothing Then pInstance = New MiaClasse

        Return pInstance

    End Function

 

    Private Sub New()

        'Codice per inizializzare la vostra classe

        'La sub new è privata, per accedere alla classe si utilizza il metodo 

         GetInstance.

    End Sub

End Class

End NameSpace

 

Cosi quando volete accedere alla classe ovunque vi troviate nel codice del vostro progetto è possibile scrivere semplicemente MiaClasse.GetInstance.

I vantaggi sono diversi: non dovete mai preoccuparvi di istanziare la classe e non rischiate di creare molteplici istanze della medesima, il codice è più pulito e più leggibile.

 

Ma non è noioso  richiamare il metodo GetInstance ogni volta che volete accedere alla vostra classe??

Per me si, allora andiamo avanti.

 

Il mio obbiettivo è quello di eliminare il metodo GetInstance e fare in modo che semplicemente digitando il nome della classe mi venga ritornata l’unica istanza esistente(e se non esiste si deve creare da sola) .

Così ho scritto una classe chiamata Globals che contiene le istanze Shared:

 

Namespace BusinessLogicLayer

    Public Class Globals

        Public Shared MiaClasse As New MiaClasse

    End Class

End Namespace

 

Poi ho creato un modulo pubblico contenente una proprietà che ritorna la variabile shared della classe Globals:

 

Public Module MainMod

    ReadOnly Property MiaClasse () As MiaClasse

        Get

            Return Globals.MiaClasse

        End Get

    End Property

End Class

 

Nel caso di applicazioni web non si crea la variabile shared ma si può salvare l’istanza della classe nelle variabili di sessione, non ha più senso di esistere la classe Globals:

 

Imports System.Web

Public Module MainMod

    ReadOnly Property MiaClasse () As MiaClasse

        Get

                Dim Ht As HttpContext = HttpContext.Current

                Dim d As MiaClasse = Ht.Session("MiaClasse ")

                If d Is Nothing Then d = New MiaClasse

                Return d

        End Get

    End Property

 

 

E’ importante includere la classe MiaClasse e Globals in un nameSpace diverso dal modulo.

 

Così posso creare un progetto ClassLibrary scrivere la mia Business Logic, referenziare la class Library in un altro progetto e utilizzarla semplicemente digitando il nome della classe.

 

Come primo post è bello incasinato. Che emozione …

… speriamo in bene per il futuro!!!
Ciao

Andrea

Print | posted on mercoledì 8 dicembre 2004 13:24 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET