Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Duplicazione di una classe/struttura

    Scusate la domanda banale (e forse un po stupida)...

    Io ho il seguente codice:

    codice:
     Public Class TestData1
            Public myInt As Integer
            Public myString As String
            Public myFloat As Double
    End Class
    
           Dim Struct1 As New TestData1
            Dim Struct2 As New TestData1
    
            Struct1.myFloat = 0.2
            Struct1.myInt = 5
            Struct1.myString = "prova 1"
    
            Struct2 = Struct1
    
            Struct2.myFloat = 0.33
            Struct2.myInt = 1
            Struct2.myString = "prova 2"
    Facendo cosi viene passato il puntatore di struct1 a struct 2 e modificando i valori di struct2 vengono modificati anche i valori di struct1

    Per fare una copia reale qual'e' la sintassi corretta?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Devi implementare l'interfaccia ICloneable nella tua classe.
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Il linguaggio?? (va indicato nel titolo della discussione)
    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

  4. #4
    Scusate ho dimenticato di indicare il Linguaggio...

    Vb.Net 2005

    Quindi non esiste una "funzione di sistema" per eseguire la duplicazione?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Riproviamo.

    Originariamente inviato da Pirelli72
    Devi implementare l'interfaccia ICloneable nella tua classe.
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    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
    Apr 2009
    Messaggi
    970
    Sbagliare è umano, perseverare è diabolico.

  8. #8
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Perfetto!
    Grazie
    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

  9. #9
    Ok ho provato e per i dati semplici funziona...

    Purtroppo ho dovuto rendere piu' complessa la classe iniziale e mi ritrovo il problema

    Esempio della Nuova Classe
    codice:
        Class myInternClass
            Public myIntegerValue As Integer
            Public myFloatValue As Double
            Public myStringValue As String
        End Class
    
        Public Class TestData1
            Implements ICloneable
            Public myInt As Integer
            Public myString As String
            Public myFloat As Double
            Public myArray() As myInternClass
            Public Function Clone() As Object Implements ICloneable.Clone
                Return (Me.MemberwiseClone)
            End Function
        End Class

    codice:
            Dim Dato1 As New TestData
            Dim Dato2 As New TestData
    
            Dato1.myInt = 1
            Dato1.myString = "Test 1"
            Dato1.myFloat = 0.0
            ReDim Dato1.myArray(5)
            For Index As Integer = 0 To 5
                Dato1.myArray(Index) = New myInternClass
                Dato1.myArray(Index).myFloatValue = Index * 2.3
                Dato1.myArray(Index).myIntegerValue = Index
                Dato1.myArray(Index).myStringValue = Index.ToString
            Next
    
            Dato2 = Dato1.Clone
    
            Dato2.myInt = 2
            Dato2.myString = "Test 2"
            Dato2.myFloat = 2.2
            For Index As Integer = 0 To 5
                Dato2.myArray(Index).myFloatValue = 2.4
                Dato2.myArray(Index).myIntegerValue = 2
                Dato2.myArray(Index).myStringValue = "prova"
            Next
    Per i dati myInt myString myFloat riesce a clonarmeli ma l'array no ...

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    La copia che hai fatto è del tipo Shallow, che effettua una clonazione parziale di un oggetto. Hai bisogno di una copia di tipo deep che sfrutta la serializzazione degli oggetti.
    Sbagliare è umano, perseverare è diabolico.

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.