Differenze tra le versioni di "Uso delle Strutture tra Classi e Moduli"
Riga 100: | Riga 100: | ||
Public Sub Form_Open() | Public Sub Form_Open() | ||
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Assegniamo i valori agli elementi che formano la Struttura:''</font> |
With variabilis | With variabilis | ||
.a = 2 | .a = 2 | ||
Riga 108: | Riga 108: | ||
<FONT color=gray>' ''Chiamiamo una routine della Classe secondaria:''</font> | <FONT color=gray>' ''Chiamiamo una routine della Classe secondaria:''</font> | ||
cl2.Prova() | cl2.Prova() | ||
+ | |||
+ | Print | ||
+ | <FONT color=gray>' ''Verifichiamo i valori dei due membri della Struttura, come modificati nella Classe secondaria:''</font> | ||
+ | With variabilis | ||
+ | Print .a | ||
+ | Print .b | ||
+ | End With | ||
End | End | ||
Riga 118: | Riga 125: | ||
Print "Elemento a = "; .a | Print "Elemento a = "; .a | ||
Print "Elemento b = "; .b | Print "Elemento b = "; .b | ||
+ | <FONT color=gray>' ''Modifichiamo i valori dei due membri della Struttura dichiarata nella Classe principale:''</font> | ||
+ | .a = 111 | ||
+ | .b = 111111 | ||
End With | End With | ||
Versione delle 11:48, 1 nov 2024
Una Struttura, o più precisamente una variabile di tipo "Struttura", dichiarata ed istanziata in una Classe o in un Modulo, può essere utilizzata anche in altre Classi ed in altri Moduli.
Tale utilizzo potrà avvenire o passando la variabile di tipo Struttura tramite i parametri di una chiamata a funzione, oppure mediante l'uso di una variabile globale di tipo Struttura.
Indice
Passaggio della variabile attraverso i parametri di una chiamata a funzione
I valori, contenuti in una variabile del tipo della Struttura dichiarata, possono essere passati ad un'altra Classe passando a quest'ultima la variabile medesima.
Si dovrà, però, avere l'accortezza di ripetere la medesima Struttura - come già dichiarata nella Classe principale - anche nelle Classi ove questa dovrà essere richiamata, confermandone precisamente anche il nome.
Anche i membri della Struttura, dichiarata nella Classe secondaria, dovranno avere i medesimi nomi dei membri della corrispondente Struttura dichiarata nella Classe principale
Il nome della variabile del tipo della Struttura della Classe secondaria potrà, invece, essere diverso dalla variabile della Classe principale.
Poiché tutte le classi sono in realtà completamente indipendenti durante il processo di compilazione, l'interprete verificherà in fase di esecuzione che la stessa Struttura è sempre dichiarata nello stesso modo in tutte le classi.
Come esempio, poniamo di avere in un progetto una Classe principale ed una Classe secondaria.
Il Codice della Classe principale sarà il seguente:
Public cl2 As New Class2 ' Istanzia la Classe secondaria ' Dichiara la Struttura: Public Struct Structura a As Byte b As Integer End Struct ' Quindi dichiara e istanzia la relativa variabile del tipo della Struttura: Private variabilis As New Structura Public Sub Form_Open() ' Assegna i valori agli elementi che formano la Struttura: With variabilis .a = 2 .b = 2000 End With ' Chiama una routine della Classe secondaria, e le passa la variabile Struttura. ' I valori saranno ritornati per "indirizzo" dalla Classe secondaria: cl2.Prova(variabilis) With variabilis ' Verifica i valori ricevuti dalla "Struttura" presente nella Classe secondaria: Print "\nValori ritornati, come modificati, dalla Classe secondaria:" Print "--->"; .a Print "--->"; .b End With End
Nella Classe secondaria, chiamata Class2, avremo il seguente codice:
' Dichiara una "Struttura" avente i medesimi membri della "Struttura" presente nella Classe principale. ' Sia tali membri che la "Struttura" stessa avranno i nomi uguali a quelli rispettivi della "Struttura" presente nella Classe principale. Public Struct Structura a As Byte b As Integer End Struct ' La routine, che viene richiamata dalla funzione chiamante presente nella Classe principale, riceve la variabile dalla Classe principale e la assegna alla variabile di tipo "Struttura" della corrente Classe secondaria. ' Detta variabile può avere un nome anche diverso dalla variabile di tipo "Struttura" presente nella Classe principale. ' E' previsto, inoltre, in questo esempio che sarà restituita per "indirizzo" alla funzione chiamante:: Public Sub Prova(var As Structura) With var ' Vede i valori ora contenuti negli elementi della variabile di tipo "Struttura": Print "Elemento 'a' ricevuto dalla Classe principale = "; .a Print "Elemento 'b' ricevuto dalla Classe principale = "; .b ' Li modifica...: .a = .a + 2 .b = .b + 2000 End With End
Uso di una variabile Globale
L'altra modalità è di utilizzare come Globale, dichiarandola publica (Public), la variabile del tipo della Struttura da richiamare. Per fare ciò, come è noto, si dichiarerà tale variabile come Public.
V'è da precisare che:
- è possibile chiamare da una Classe, sia essa principale o secondaria, una variabile globale di tipo Struttura dichiarata ed instanziata in altra Classe o in un Modulo;
- ugualmente è possibile chiamare da un Modulo una variabile globale, di tipo Struttura, dichiarata ed istanziata in un altro Modulo o in un'altra Classe.
1° esempio
Facciamo un esempio, nel quale abbiamo una Classe principale ed una Classe secondaria.
Nella Classe principale dichiareremo ed istazieremo sia la Struttura da passare alla Classe secondaria, sia, ovviamente, la relativa variabile:
Public cl2 As New Class2 ' Istanziamo la Classe secondaria ' Dichiariamo la Struttura: Public Struct Structura a As Byte b As Integer End Struct ' Quindi dichiariamo come Globale (Publica) ed istanziamo ' la relativa variabile del tipo della precedente Struttura: Public variabilis As New Structura Public Sub Form_Open() ' Assegniamo i valori agli elementi che formano la Struttura: With variabilis .a = 2 .b = 1000 End With ' Chiamiamo una routine della Classe secondaria: cl2.Prova() Print ' Verifichiamo i valori dei due membri della Struttura, come modificati nella Classe secondaria: With variabilis Print .a Print .b End With End
Nella Classe secondaria, chiamata Class2, avremo il seguente codice:
Public Sub Prova() ' Richiamiamo ed utilizziamo la Struttura dichiarata nella Classe principale: With FMain.variabilis Print "Elemento a = "; .a Print "Elemento b = "; .b ' Modifichiamo i valori dei due membri della Struttura dichiarata nella Classe principale: .a = 111 .b = 111111 End With End
2° esempio
In quest'altro esempio avremo un Classe principale ed un Modulo, nel quale saranno semplicemente dichiarate la Struttura, le variabili del tipo della Struttura e la variabile vettoriale del tipo della Struttura. Tale variabile vettoriale raccoglierà nei suoi elementi le predette singole variabili del tipo della Struttura dichiarata.
Nella Classe principale avremo il sguente semplice codice:
Public Sub Form_Open() With Module1 .a = [.l1, .l2, .l3] .a[0].a = 10 .a[0].b = 1000 .a[1].a = 20 .a[1].b = 2000 .a[2].a = 30 .a[2].b = 3000 End With ' Effettuiamo la verifica: With Module1 Print .a[0].a Print .a[0].b Print .a[1].a Print .a[1].b Print .a[2].a Print .a[2].b End With End
Mentre nel Modulo secondario, che ad esempio chiameremo Module1, avremo il seguente codice:
Public Struct Struttura a As Byte b As Short End Struct Public a As New Struttura[3] Public l1 As New Struttura Public l2 As New Struttura Public l3 As New Struttura