/ / Accesso alla stessa istanza di una classe in un'altra forma: vb.net, class, singleton, istanza

Accedere alla stessa istanza di una classe in un'altra forma: vb.net, class, singleton, instance

Sono sicuro che questa è una domanda semplice, ma non ho abbastanza esperienza per conoscere la risposta. :)

DataClass, Form1, Form2

Ho una lezione pubblica, DataClass, in un file separato, DataClass.vb. Nel DataClass Ho i dati memorizzati in diversi array a cui devo accedere. Ho dei metodi in DataClass in modo che io possa accedere ai dati. Uno di loro è GetName. Tutto funziona bene Form1. Devo accedere agli stessi dati nelle matrici in un altro modulo, ma mi viene richiesto di chiamare una nuova istanza della classe, quindi quando chiamo i metodi per accedere alle matrici, i dati sono vuoti.

Ho visto alcuni thread menzionare la creazione di a singleton class, ma la maggior parte riguarda C # che non conosco altrettanto bene.

Qual è la migliore pratica?

risposte:

3 per risposta № 1

Ci sono molti modi in cui puoi farlo. Uno di questi implicherebbe la creazione di a Module e quindi creare la variabile che istanzia la tua classe Public all'interno del modulo:

Module MyGlobalVariables
Public MyDataClass As DataClass
End Module

Ora, tutti i moduli del tuo progetto saranno in grado di accedere a DataClass attraverso MyGlobalVariables.MyDataClass.


Un metodo preferibile sarebbe aggiungere una proprietà a Form2 che può essere impostata su DataClass esempio:

Public Property MyDataClass As DataClass

Quindi, potresti istanziare il tuo Form2 come segue (presupponendo la variabile utilizzata per creare un'istanza DataClass in Form1 è chiamato _dataClass):

Dim frm2 As New Form2()
frm2.MyDataClass = _dataClass
frm2.Show()

E infine, un altro modo sarebbe quello di scavalcare il costruttore di Form2 e consentirgli di ricevere un parametro di tipo DataClass. Quindi, potresti creare un'istanza Form2 come:

Dim frm2 As New Form2(_dataClass)

Spero che questo ti aiuti...


1 per risposta № 2

Puoi creare una classe singleton come questa

Public Class DataClass
Public Shared ReadOnly Instance As New DataClass()

Private Sub New()
End Sub

" Other members here
End Class

È possibile accedere a una singola istanza tramite la condivisione Instance membro che viene inizializzato automaticamente. Il costruttore New è privato al fine di vietare la creazione di una nuova istanza al di fuori della classe.

Puoi accedere al singleton in questo modo

Dim data = DataClass.Instance

Ma questo non è possibile

Dim data = new DataClass() "NOT POSSIBLE!

Poiché la classe singleton è accessibile tramite il nome della classe, è possibile accedervi facilmente dai due moduli.