Uso delle Strutture tra Classi e Moduli
Una Struttura, o più precisamente: una variabile di tipo "Struttura", dichiarata ed istanziata in una Classe, può essere passata anche ad altre Classi (o anche ad altri Moduli).
Indice
Passaggio di valori attraverso i parametri
I valori, contenuti in una variabile del tipo della Struttura dichiarata, possono essere passati ad un'altra Classe passando ad 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. 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.
Public classe2 As New Classe2 ' Istanziamo la Classe secondaria ' Dichiariamo la Struttura: Public Struct structura a As Byte b As Integer End Struct ' Quindi dichiariamo ed istanziamo la relativa variabile del tipo della Struttura: Private variabilis As New Structura ' Per comodità creiamo un'altra variabile del medesimo tipo della "Struttura". ' Questa nuova variabile ci servirà per raccogliere i valori ritrasmessi dalla Classe secondaria: Private ritorno As New Structura Public Sub Form_Open() ' Assegnamo i valori agli elementi che formano la Struttura: With variabilis .a = 2 .b = 1000 End With ' Chiamiamo una routine della Classe secondaria. ' e le passiamo la variabile Struttura. ' Prevediamo anche un ritorno di valori dalla "Struttura" presente nella Classe secondaria: ritorno = classe2.prova(variabilis) With ritorno ' Verifichiamo i valori ricevuti dalla "Struttura" presente nella Classe secondaria: Print "Ritorno:" Print "--->"; .a Print "--->"; .b ' li modifichiamo ulteriormente...: .a = .a + 2 .b = .b + 1000 ' ...e li riverifichiamo come modificati: Print Print "--->"; .a Print "--->"; .b End With End
Nella Classe secondaria avremo il seguente codice:
' Dichiariamo una "Struttura" avente i medesimi campi della "Struttura" presente nella Classe principale. ' Sia tali campi 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 alla funzione chiamante una variabile di tipo della "Struttura": Public Sub prova(var2 As Structura) As Structura With var2 ' Vediamo i valori ora contenuti negli elementi della variabile di tipo "Struttura": Print "Elemento a = "; .a Print "Elemento b = "; .b ' Li modifichiamo...: .a = .a + 2 .b = .b + 1000 End With ' ...e li ripassiamo alla funzione chiamante della Classe principale: Return var2 End
Uso di una variabile Globale
L'altra modalità è di utilizzare come Globale, dichiarandola publica, la variabile del tipo della Struttura da richiamare. Per fare ciò, come è noto, si dichiarerà tale variabile come Public.
Anche in quest'altro esempio 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 classe2 As New Classe2 ' 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() ' Assegnamo i valori agli elementi che formano la Struttura: With variabilis .a = 2 .b = 1000 End With ' Chiamiamo una routine della Classe secondaria: class2.prova() End
Nella Classe secondaria avremo il seguente codice:
Public Sub prova() ' Richiamiamo ed utilizziamo la Struttura dichairata nella Classe principale: With FMain.variabilis Print "Elemento a = "; .a Print "Elemento b = "; .b End With End
Chiamare da una Classe una variabile posta in un Modulo o in una Classe secondaria
Non è possibile chiamare da una Classe una variabile globale, di tipo Struttura, dichiarata ed istanziata in Modulo. E' invece possibile chiamare da una Classe una viariabile globale, di tipo Struttura, dichiarata ed istanziata in un'altra Classe secondaria.
Nella Classe, ove avviene la chiamata della variabile globale di tipo Struttura, deve essere ripetuta la dichiarazione in modo perfettamente identico della Struttura istanziata nell'altra Classe secondaria.
Chiamare da un Modulo una variabile posta in un altro Modulo o in una Classe secondaria
E', invece, possibile chiamare ed utilizzare una variabile globale, di tipo Struttura, dichiarata ed istanziata in altro Modulo o in una Classe secondaria.