Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    105

    [VB.NET] parametri via riferimento

    Salve a tutti, volevo sapere se è possibile creare dei puntatori in vb.net o meglio nel mio caso io ho una matrice con dei valori e ho una variabile in cui ciclicamente viene salvato un valore della matrice.
    Quello che vorrei fare è far si che la variabile invece di salvare ogni volta sia indirizzo che valore punti direttamente alla cella di memoria della matrice con il valore che mi interessa.
    Come si fa in c++ diciamo. E' fattibile?
    grazie mille

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Se la variabile è un tipo reference, allora è un puntatore, solo che l'archittettura .NET fa in modo che si comporti come una variabile normale. Se la variabile non è un tipo reference, allora devi vedere se la classe Marshal.

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Non hai definito qual è il tipo di valore che memorizzi nella matrice; ad ogni modo, se il tipo appartiene a un oggetto, qualsiasi assegnazione di quell'elemento a una variabile non fa altro che copiare il suo riferimento (visto che si tratta di un reference type) e pertanto ottieni automaticamente quello che chiedi.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    105
    Originariamente inviato da ShaleN
    Se la variabile è un tipo reference, allora è un puntatore, solo che l'archittettura .NET fa in modo che si comporti come una variabile normale. Se la variabile non è un tipo reference, allora devi vedere se la classe Marshal.

    E come faccio a dichiarare una variabile di tipo reference?
    Io dichiaro le variabili così:
    Dim var As TipoDiDato

    Ma non so come dirgli che tipo di assegnazione deve compiere.


    Originariamente inviato da alka
    Non hai definito qual è il tipo di valore che memorizzi nella matrice; ad ogni modo, se il tipo appartiene a un oggetto, qualsiasi assegnazione di quell'elemento a una variabile non fa altro che copiare il suo riferimento (visto che si tratta di un reference type) e pertanto ottieni automaticamente quello che chiedi.
    Si scusami, il tipo di dato della matrice è un Oggetto (di classe personalizzata).
    Ma quindi questo significa che se modifico il valore nella variabile si modifica anche il valore nella cella della matrice o viceversa?

    Perchè è quello che mi interesserebbe in maniera da ottimizzare la matrice (visto che può avere molti valori uguali).

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Adanf
    E come faccio a dichiarare una variabile di tipo reference?
    Tutte le variabili di tipo Integer, Boolean, DateTime, Double, Byte, gli Enum e così via sono ValueType.

    Un esempio di reference type, invece, è String.

    E' una distinzione fondamentale da conoscere poiché fa parte dei principi base di funzionamento del framework.

    Leggi questo articolo e fai ricerche con le parole chiave di cui sopra per approfondire.

    Originariamente inviato da Adanf
    Si scusami, il tipo di dato della matrice è un Oggetto (di classe personalizzata).
    Ma quindi questo significa che se modifico il valore nella variabile si modifica anche il valore nella cella della matrice o viceversa?
    Se la matrice contiene oggetti, assegnando a una variabile Matrice(indice) equivale ad assegnarle il riferimento all'oggetto che si trova in quella posizione dell'array.

    Se invece si tratta di interi, booleani e altri tipi analoghi, viene assegnato il valore.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Reference -> Eredita da System.Object
    Value -> Eredita da System.ValueType (che a sua volta eredita da Object, ma ne ridefinisce i metodi)

    Leggi qui.

    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    105
    Grazie mille delle risposte ora mi è tutto un pò più chiaro di come vengono gestire le variabili in vb.net.

    Solo che non ho ben capito una cosa su come ottimizzare un programma:
    Se io ho per esempio una matrice diciamo "base" dove ogni cella ha dentro un valore di un range di valori (quindi nella matrice base i valori non si ripetono mai) e poi ho un'altra matrice (più grande) sempre dello stesso tipo di quella precedente solo che ogni cella può avere uno qualsiasi dei valori della matrice base (quindi molto probabilmente ci saranno valori che si ripetono) è più conveniente per ottimizzare lo spazio occupato dalla matrice secondaria usare per le celle un tipo Value (che dal link postato sembra più veloce) oppure un tipo Reference (che dovrebbe puntare alla stessa area di memoria del valore della matrice base)?

    grazie mille a tutti siete stati utilissimi, come sempre!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.