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 № 1Ci 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.