Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [VB.NET] MyCollection

  1. #1

    [VB.NET] MyCollection

    Avevo intenzione di creare una collection personale, così stavo creando una nuova classe, ma sto avendo un problema con la gestione degli oggetti.
    La classe si chiama MyCollection

    Public Class MyCollection
    Private Chiavi As ArrayList
    Private Valori As ArrayList

    Public Sub New()
    Chiavi = New ArrayList()
    Valori = New ArrayList()
    End Sub

    Public Sub Add(ByVal Key As String, ByVal Value As Object)
    Try
    VerificaChiaveValida(Key)
    If VerificaChiaveUnivoca(Key) Then
    Chiavi.Add(Key)
    Valori.Add(Value )
    End If
    Catch ex As Exception
    Throw ex
    End Try
    End Sub

    ............
    Nel progetto principale uso l'oggetto MyCollection per una ListaOggetti:

    .....
    ListaOggetti as MyCollection = new Mycollection
    MioOggetto as MiaClasse=new MiaClasse
    Chiave as String
    .....

    ed in un procedura:

    .....
    ListaOggetti.Add(Chiave, MioOggetto )
    MioOggetto.Reset()
    .....
    Ora, la procedura MioOggetto.Reset() , fa il reset di tutte le informazioni contenute nell'oggetto, fin qui tutto bene.
    Ecco il problema...anche nell'oggetto MyCollection, dove ho copiato MioOggetto, perdo tutte le informazioni, ma non ne capisco le ragioni...
    Perchè mai il reset di MioOggetto, deve portare al reset anche dell'oggetto contenuto nell'ArrayList "Valori", contenuto nella mia classe?

  2. #2
    Perché MioOggetto di fatto è un puntatore al tuo oggetto, e sia MioOggetto che il riferimento contenuto nella collezione puntano al medesimo oggetto. Se vuoi avere due oggetti indipendenti devi creare una copia, implementando l'interfaccia ICloneable.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    Perché MioOggetto di fatto è un puntatore al tuo oggetto, e sia MioOggetto che il riferimento contenuto nella collezione puntano al medesimo oggetto. Se vuoi avere due oggetti indipendenti devi creare una copia, implementando l'interfaccia ICloneable.
    Credevo che il passaggio dei parametri alla funzione ByVal , creasse una copia dell'oggetto, e fosse ByRef che passasse il riferimento

  4. #4
    Crea una copia del puntatore all'oggetto; leggiti questa discussione (fino in fondo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Ottimo, ho risolto il problema, ti ringrazio

  6. #6
    Non c'è di che; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

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.