Differenze tra le versioni di "Uso delle Strutture tra Classi e Moduli"

Da Gambas-it.org - Wikipedia.
 
(39 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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).
+
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.
 +
<BR> 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''.
  
  
==Passaggio di valori attraverso i parametri==
+
==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 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.
+
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.
 +
<BR>Si dovrà, però, avere l'accortezza di <U>ripetere la medesima Struttura</u> - <U>come già dichiarata nella Classe principale</u> - <U>anche nelle Classi ove questa dovrà essere richiamata, confermandone precisamente anche il nome</u>.
 +
<BR>Anche i membri della Struttura, dichiarata nella Classe secondaria, <U>dovranno avere i medesimi nomi</u> dei membri della corrispondente Struttura dichiarata nella Classe principale
 +
<BR>Il nome della <U>variabile</u> del tipo della Struttura della Classe secondaria potrà, invece, essere diverso dalla variabile della Classe principale.
 
<BR>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.
 
<BR>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.
 
Come esempio, poniamo di avere in un progetto una Classe principale ed una Classe secondaria.
  '''Public''' classe2 As New Classe2 <FONT color=#006400>' ''Istanziamo la Classe secondaria''</font>
+
<BR>Il Codice della <U>Classe principale</u> sarà il seguente:
 +
  Public cl2 As New Class2 <FONT color=gray>' ''Istanzia la Classe secondaria''</font>
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''Dichiariamo la Struttura:''</font>
+
  <FONT color=gray>' ''Dichiara la Struttura:''</font>
  '''Public''' Struct <FONT color=#B22222>structura</font>
+
  '''Public''' Struct <FONT color=#B22222>Structura</font>
 
   a As Byte
 
   a As Byte
 
   b As Integer
 
   b As Integer
 
  '''End''' Struct
 
  '''End''' Struct
 
   
 
   
  <FONT color=#006400>' ''Quindi dichiariamo ed istanziamo la relativa variabile del tipo della Struttura:''</font>
+
  <FONT color=gray>' ''Quindi dichiara e istanzia la relativa variabile del tipo della Struttura:''</font>
  '''Private''' <FONT color=blue>variabilis</font> As New <FONT color=#B22222>Structura</font>
+
  Private <FONT color=blue>variabilis</font> As New <FONT color=#B22222>Structura</font>
 
   
 
   
<FONT color=#006400>' ''Per comodità creiamo un'altra variabile del medesimo tipo della "Struttura".''
 
' ''Questa nuova variabile ci servirà per raccogliere i valori ritrasmessi dalla Classe secondaria:</font>
 
'''Private''' <FONT color=#FF0055>ritorno</font> As New <FONT color=#B22222>Structura</font>
 
 
   
 
   
 +
Public Sub Form_Open()
 
   
 
   
  '''Public''' Sub Form_Open()
+
  <FONT color=gray>' ''Assegna i valori agli elementi che formano la Struttura:''</font>
 +
  With <FONT color=blue>variabilis</font>
 +
    .a = 2
 +
    .b = 2000
 +
  End With
 
   
 
   
  <FONT color=#006400>' ''Assegnamo i valori agli elementi che formano la Struttura:''</font>
+
  <FONT color=gray>' ''Chiama una routine della Classe secondaria, e le passa la variabile Struttura.''
    With <FONT color=blue>variabilis</font>
+
  ' ''I valori saranno ritornati per "'''indirizzo'''" dalla Classe secondaria'':</font>
      .a = 2
+
  cl2.Prova(<FONT color=blue>variabilis</font>)
      .b = 1000
 
    End With
 
 
 
<FONT color=#006400>' ''Chiamiamo una routine della Classe secondaria.''
 
' ''e le passiamo la variabile Struttura.''
 
  ' ''Prevediamo anche un ritorno di valori dalla "Struttura" presente nella Classe secondaria'':</font>
 
    <FONT color=#FF0055>ritorno</font> = classe2.prova(<FONT color=blue>variabilis</font>)
 
 
   
 
   
      With <FONT color=#FF0055>ritorno</font>
+
  With <FONT color=blue>variabilis</font>
  <FONT color=#006400>' ''Verifichiamo i valori ricevuti dalla "Struttura" presente nella Classe secondaria'':</font>
+
  <FONT color=gray>' ''Verifica i valori ricevuti dalla "Struttura" presente nella Classe secondaria'':</font>
        Print "Ritorno:"
+
    Print "\nValori ritornati, come modificati, dalla Classe secondaria:"
        Print "--->"; .a
+
    Print "--->"; .a
        Print "--->"; .b
+
    Print "--->"; .b
<FONT color=#006400>' ''li modifichiamo ulteriormente...'':</font>
+
  End With
        .a = .a + 2
 
        .b = .b + 1000
 
<FONT color=#006400>' ''...e li riverifichiamo come modificati:''</font>
 
        Print
 
        Print "--->"; .a
 
        Print "--->"; .b
 
      End With
 
 
   
 
   
  '''End'''
+
  End
  
 
+
Nella <U>Classe secondaria</u>, chiamata ad esempio ''Class2'', avremo il seguente codice:
Nella Classe secondaria avremo il seguente codice:
+
  <FONT color=gray>' ''Dichiara una "Struttura" avente i medesimi membri della "Struttura" presente nella Classe principale.''
  <FONT color=#006400>' ''Dichiariamo una "Struttura" avente i medesimi campi 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.''</font>
  ' ''Sia tali campi che la "Struttura" stessa avranno i nomi uguali''
+
  '''Public''' Struct <FONT color=#B22222>Structura</font>
' ''a quelli rispettivi della "Struttura" presente nella Classe principale:''</font>
 
  '''Public''' Struct <FONT color=#B22222>structura</font>
 
 
     a As Byte
 
     a As Byte
 
     b As Integer
 
     b As Integer
 
  '''End''' Struct  
 
  '''End''' Struct  
 
   
 
   
+
  <FONT color=gray>' ''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.''
  <FONT color=#006400>' ''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.''
 
  ' ''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"'':</font>
+
  ' ''E' previsto, inoltre, in questo esempio che sarà restituita per "indirizzo" alla funzione chiamante:'':</font>
  '''Public''' Sub prova(<FONT color=purple>var2</font> As <FONT color=#B22222>Structura</font>) As <FONT color=#B22222>Structura</font>
+
  Public Sub Prova(<FONT color=green>var</font> As <FONT color=#B22222>Structura</font>)
 
   
 
   
    With <FONT color=purple>var2</font>
+
  With <FONT color=green>var</font>
  <FONT color=#006400>' ''Vediamo i valori ora contenuti negli elementi della variabile di tipo "Struttura":''</font>
+
  <FONT color=gray>' ''Vede i valori ora contenuti negli elementi della variabile di tipo "Struttura":''</font>
      Print "Elemento a = "; .a
+
    Print "Elemento 'a' ricevuto dalla Classe principale = "; .a
      Print "Elemento b = "; .b
+
    Print "Elemento 'b' ricevuto dalla Classe principale = "; .b
  <FONT color=#006400>' ''Li modifichiamo...:''</font>
+
  <FONT color=gray>' ''Li modifica...:''</font>
      .a = .a + 2
+
    .a = .a + 2
      .b = .b + 1000
+
    .b = .b + 2000
    End With
+
  End With
 
   
 
   
  <FONT color=#006400>' ''...e li ripassiamo alla funzione chiamante della Classe principale:''</font>
+
  End
    Return <FONT color=purple>var2</font>
 
 
'''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.
  
==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.
+
===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:
+
Nella <U>Classe principale</u> dichiareremo ed istazieremo sia la Struttura da passare alla Classe secondaria, sia, ovviamente, la relativa variabile:
  '''Public''' classe2 As New Classe2 <FONT color=#006400>' ''Istanziamo la Classe secondaria''</font>
+
  '''Public''' cl2 As New Class2 <FONT color=gray>' ''Istanziamo la Classe secondaria''</font>
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''Dichiariamo la Struttura:''</font>
+
  <FONT color=gray>' ''Dichiariamo la Struttura:''</font>
  '''Public''' Struct structura
+
  '''Public''' Struct Structura
 
   a As Byte
 
   a As Byte
 
   b As Integer
 
   b As Integer
 
  '''End''' Struct
 
  '''End''' Struct
 
   
 
   
  <FONT color=#006400>' ''Quindi dichiariamo come ''Globale'' (Publica)'' ed istanziamo''
+
  <FONT color=gray>' ''Quindi dichiariamo come ''Globale'' (Publica)'' ed istanziamo la relativa variabile del tipo della precedente Struttura:''</font>
' ''la relativa variabile del tipo della precedente Struttura:''</font>
+
'''<FONT color=#B22222>Public</font>''' variabilis As New Structura
  '''<FONT color=#B22222>Public</font>''' variabilis As New Structura
 
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
  <FONT color=#006400>' ''Assegnamo i valori agli elementi che formano la Struttura:''</font>
+
  <FONT color=gray>' ''Assegniamo i valori agli elementi che formano la Struttura:''</font>
    With variabilis
+
  With variabilis
      .a = 2
+
    .a = 2
      .b = 1000
+
    .b = 1000
    End With
+
  End With
 +
 +
<FONT color=gray>' ''Chiamiamo una routine della Classe secondaria:''</font>
 +
  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
 +
 
 +
Nella <U>Classe secondaria</u>, chiamata ad esempio ''Class2'', avremo il seguente codice:
 +
Public Sub Prova()
 +
 +
<FONT color=gray>' ''Richiamiamo ed utilizziamo la Struttura dichiarata nella Classe principale:''</font>
 +
  With FMain.variabilis
 +
    Print "Elemento a = "; .a
 +
    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
 +
 
 +
 
 +
===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''. <BR>Tale variabile vettoriale raccoglierà nei suoi elementi le predette singole variabili del tipo della ''Struttura'' dichiarata.
 +
 
 +
Nella <U>Classe principale</u> avremo il seguente 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
 
    
 
    
  <FONT color=#006400>' ''Chiamiamo una routine della Classe secondaria:''</font>
+
  <FONT color=gray>' ''Effettuiamo la verifica:''</font>
    class2.prova()
+
  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
 +
 +
<FONT color=gray>' ''Se vogliamo modificare nel "Modulo secondario" i valori dei membri della Struttura ad esso passati:''</font>
 +
  Module1.Modifica()
 
   
 
   
  '''End'''
+
  <FONT color=gray>' ''Effettuiamo la verifica:''</font>
 +
  Print "\nValori modificati nel " "Modulo secondario:"
 +
  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 <U>''Modulo'' secondario</u>, che ad esempio chiameremo ''Module1'', avremo il seguente codice:
Nella Classe secondaria avremo il seguente codice:
+
  '''<FONT color=#B22222>Public</font>''' Struct Struttura
  '''Public''' Sub prova()
+
  a As Byte
 +
  b As Short
 +
'''End''' Struct
 +
 +
 +
'''<FONT color=#B22222>Public</font>''' a As New Struttura[3]
 +
 +
'''<FONT color=#B22222>Public</font>''' l1 As New Struttura
 +
'''<FONT color=#B22222>Public</font>''' l2 As New Struttura
 +
'''<FONT color=#B22222>Public</font>''' l3 As New Struttura
 +
 +
Public Sub Modifica()
 
   
 
   
<FONT color=#006400>' ''Richiamiamo ed utilizziamo la Struttura dichairata nella Classe principale:''</font>
+
  a[0].a = a[0].a + 11
    With FMain.variabilis
+
  a[0].b = a[0].b + 1111
      Print "Elemento a = "; .a
+
  a[1].a = a[1].a + 11
      Print "Elemento b = "; .b
+
  a[1].b = a[1].b + 1111
    End With
+
  a[2].a = a[2].a + 11
 +
  a[2].b = a[2].b + 1111
 
   
 
   
  '''End'''
+
  End
  
  
===Chiamare da una Classe una variabile posta in un Modulo o in una Classe===
+
==Passaggio per "valore" di un array di tipo ''Struttura'' da una Classe secondaria a quella principale==
E' possibile chiamare da una Classe, sia essa principale o secondaria, una viariabile globale di tipo ''Struttura'' dichiarata ed instanziata in altra Classe o in un Modulo.
+
Nel seguente caso vedremo il passaggio per "valore" di un <U>array di tipo ''Struttura''</u> da una Classe ''secondaria'' a una Classe o Modulo ''principale''.
 +
<BR>La particolarità di questo esempio è che a differenza del codice, presente nel primo paragrafo sopra, dalla Classe o dal Modulo ''principale'' <U>non</u> avverrà alcun passaggio di un Oggetto di tipo ''Struttura'', ma verrà soltanto ricevuto dalla Classe ''secondaria''.
  
Egualmente è possibile chiamare da un Modulo una viariabile globale, di tipo ''Struttura'', dichiarata ed istanziata in un altro Modulo o in un'altra Classe.
+
Nella Classe o nel Modulo <U>principale</u> avremo il seguente codice:
 +
Public Struct Struttura
 +
  b As Byte
 +
  c As Short
 +
End Struct
 +
 +
 +
Public Sub Main()
 +
 +
  Dim ss As Struttura[]
 +
  Dim cl1 As New Class1
 +
 +
  ss = cl1.Funzione()
 +
 +
<FONT Color=gray>' ''Verifica il risultato:''</font>
 +
  For b As Byte = 0 To ss.Max
 +
    Print ss[b].b
 +
    Print ss[b].c
 +
    Print
 +
  Next
 +
 +
End
 +
Nella Classe <U>secondaria</u> avremo:
 +
Public Struct Struttura
 +
  b As Byte
 +
  c As Short
 +
End Struct
 +
 +
 +
Public Sub Funzione() As Struttura[] <FONT Color=gray>' ''Ritorno per "valore" di un array del tipo della Struttura dichiarata''</font>
 +
 +
  Dim sstt As New Struttura[4]
 +
 +
<FONT Color=gray>' ''Genera le singole istanze, contenute negli elementi dell'array di tipo Struttura, e popola di valori i loro membri:''</font>
 +
  For b As Byte = 0 To sstt.Max
 +
    sstt[b] = New Struttura
 +
    sstt[b].b = b * 10
 +
    sstt[b].c = b * 1000
 +
  Next
 +
 
 +
  Return sstt
 +
 
 +
End

Versione attuale delle 11:57, 3 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.


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 ad esempio 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 ad esempio 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 seguente 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

' Se vogliamo modificare nel "Modulo secondario" i valori dei membri della Struttura ad esso passati:
 Module1.Modifica()

' Effettuiamo la verifica:
 Print "\nValori modificati nel " "Modulo secondario:"
 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

Public Sub Modifica()

 a[0].a = a[0].a + 11
 a[0].b = a[0].b + 1111
 a[1].a = a[1].a + 11
 a[1].b = a[1].b + 1111
 a[2].a = a[2].a + 11
 a[2].b = a[2].b + 1111

End


Passaggio per "valore" di un array di tipo Struttura da una Classe secondaria a quella principale

Nel seguente caso vedremo il passaggio per "valore" di un array di tipo Struttura da una Classe secondaria a una Classe o Modulo principale.
La particolarità di questo esempio è che a differenza del codice, presente nel primo paragrafo sopra, dalla Classe o dal Modulo principale non avverrà alcun passaggio di un Oggetto di tipo Struttura, ma verrà soltanto ricevuto dalla Classe secondaria.

Nella Classe o nel Modulo principale avremo il seguente codice:

Public Struct Struttura
  b As Byte
  c As Short
End Struct


Public Sub Main()

 Dim ss As Struttura[]
 Dim cl1 As New Class1

 ss = cl1.Funzione()

' Verifica il risultato:
 For b As Byte = 0 To ss.Max
   Print ss[b].b
   Print ss[b].c
   Print
 Next

End

Nella Classe secondaria avremo:

Public Struct Struttura
  b As Byte
  c As Short
End Struct


Public Sub Funzione() As Struttura[] ' Ritorno per "valore" di un array del tipo della Struttura dichiarata

 Dim sstt As New Struttura[4]

' Genera le singole istanze, contenute negli elementi dell'array di tipo Struttura, e popola di valori i loro membri:
 For b As Byte = 0 To sstt.Max
   sstt[b] = New Struttura
   sstt[b].b = b * 10
   sstt[b].c = b * 1000
 Next
 
 Return sstt
 

End