Differenze tra le versioni di "Contenere valori di diverso tipo"

Da Gambas-it.org - Wikipedia.
Riga 5: Riga 5:
 
* una variabile vettoriale di tipo ''<SPAN Style="text-decoration:underline">Variant</span>'';
 
* una variabile vettoriale di tipo ''<SPAN Style="text-decoration:underline">Variant</span>'';
 
* la ''[[Strutture:_dichiarazione_ed_uso|Struttura]]'';
 
* la ''[[Strutture:_dichiarazione_ed_uso|Struttura]]'';
* l'allocazione di memoria con la funzione ''[[Assegnare_ad_un_Puntatore_un'area_di_memoria_riservata_con_Alloc()|Alloc()]]'', alla quale farà riferimento una variabile di tipo ''Puntatore''. Per ricavare dati da tale area allocata, sarà necessario usare i ''Memory-Stream'' in modalità lettura (''For Read''). Per scrivere, invece, dati in tale area di memeoria così allocata, l'istruzione ''Memory'' sarà impostata in scrittura (''For Write'');
+
* l'allocazione di memoria con la funzione ''[[Assegnare_ad_un_Puntatore_un'area_di_memoria_riservata_con_Alloc()|Alloc()]]'', alla quale farà riferimento una variabile di tipo ''Puntatore''. Per ricavare dati da tale area allocata, sarà necessario usare i ''Memory-Stream'' in modalità lettura (''For Read''). Per scrivere, invece, dati in tale area di memoria così allocata, l'istruzione ''Memory'' sarà impostata in scrittura (''For Write'');
 
* una ''[[Variabile_del_tipo_di_una_Classe_specifica_creata|Classe specifica]]'' appositamente creata.
 
* una ''[[Variabile_del_tipo_di_una_Classe_specifica_creata|Classe specifica]]'' appositamente creata.
  

Versione delle 05:43, 28 ott 2013

Come è noto una variabile di tipo vettore (array) è un'area di memoria riservata nella quantità determinata da una molteplicità di variabili del medesimo tipo, ossia che occupano tutte una uguale quantità di memoria.


Per contenere, invece, insieme valori di tipo diverso |1|, che occupano cioè porzioni di memoria non uguali fra loro, è possibile utilizzare: |2|

  • una variabile vettoriale di tipo Variant;
  • la Struttura;
  • l'allocazione di memoria con la funzione Alloc(), alla quale farà riferimento una variabile di tipo Puntatore. Per ricavare dati da tale area allocata, sarà necessario usare i Memory-Stream in modalità lettura (For Read). Per scrivere, invece, dati in tale area di memoria così allocata, l'istruzione Memory sarà impostata in scrittura (For Write);
  • una Classe specifica appositamente creata.


Note

[1] Poniamo il caso di voler contenere insieme variabili dei seguenti tipi: una variabile di tipo Byte, una variabile di tipo Short, tre variabili di tipo Integer ed una variabile di tipo Long. I tipi di queste variabili non sono omogenei, nel senso che occupano ciascuno una quantità di memoria diversa. Infatti, come si sa, la variabile di tipo Byte occupa un solo byte di memoria; la variabile di tipo Short occupa due byte di memoria; la variabile di tipo Integer occupa quattro byte di memoria; la variabile di tipo Long occupa otto byte di memoria.

[2] La sola circostanza di voler contenere insieme variabili di tipo diverso (potremmo dire: allocare memoria con tipi di unità quantitative diverse) ci costringe a non utilizzare un vettore (array).
L'unica eccezione è l'array di tipo Variant, esempio:

Public Struct Struttuta
  a As Byte
  i As Integer
  s As Short
End Struct
   

Public Sub Form_Open()

 Dim vnt As New Variant[]
 Dim st As String = "testo qualsiasi"
 Dim b As Byte = 99
 Dim sh As Short = 999
 Dim i As Integer = 99999
 Dim stt1 as new Struttura
 Dim stt2 as new Struttura

  
   With stt1
     .a = 10
     .i = 100000
     .s = 1000
   End With
 
' Inseriamo nel vettore di tipo 'Variant' variabili di tipo differente fra loro:
   With vnt
     .Add(stt1)
     .Add(b)
     .Add(sh)
     .Add(i)
     .Add(st)
   End With

   stt2 = vnt[0]

   Print stt2.a
   Print stt2.i
   Print stt2.s
   Print vnt[1]
   Print vnt[2]
   Print vnt[3]
   Print vnt[4]
  
End