Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Mar 2002
    Messaggi
    1,811

    distruttore della classe (problema)

    salve a tutti nella classe ho queste due sub
    una è il costruttore che aprela connessione e il distruttofe che la chiude

    codice:
     
        Public Sub New()
            conn.ConnectionString ="dsn=..."
            conn.Open()
        End Sub
    
        Protected Overrides Sub Finalize()
              conn.Close()
        End Sub
    il punto è che quando dichiaro una variabile oggetto:dim a as new cls_classe, il costruttore mi connette
    ma quando arrivo a: a = nothing non mi richiama il distruttore per chiudere la connessione
    cosa devo fare?
    grazie

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Re: distruttore della classe (problema)

    Originariamente inviato da amodio
    salve a tutti nella classe ho queste due sub
    una è il costruttore che aprela connessione e il distruttofe che la chiude

    codice:
     
        Public Sub New()
            conn.ConnectionString ="dsn=..."
            conn.Open()
        End Sub
    
        Protected Overrides Sub Finalize()
              conn.Close()
        End Sub
    il punto è che quando dichiaro una variabile oggetto:dim a as new cls_classe, il costruttore mi connette
    ma quando arrivo a: a = nothing non mi richiama il distruttore per chiudere la connessione
    cosa devo fare?
    grazie
    Quello che tenti di fare mi pare sbagliato dal punto di vista logico.
    Finalize è un metodo speciale, invocato dal garbace collector prima di rilasciare la memoria allocata dall'oggetto. Funziona più o meno come l'evento Class_Terminate di VisualBasic6, ad eccezione del fatto che può essere invocato diversi secondi, minuti, o persiono ore dopo che l'applicazione ha eliminato l'oggetto a livello logico, impostando a nathing l'ultima variabile contenente un riferimento ad esso, oppure dopo che la variabile esce dall'ambito di visibilità, il che produce lo stesso effetto.
    Continuando a copiare dal manuale, dal momento che gli oggetti .NET non possiedono dei distruttori veri e propri, le classi ben progettate dovrebbero esporre un metodo che consenta ai client ben realizzati di rilasciare manualmente ogni tipo di risorsa, non appena l'oggetto non serve più: in altre parole subito prima di impostare il riferimento a Nothing, piuttosto che attendere la successiva garbage collection.
    Le classi che vogliono mettere a disposizione tale funzionalità dovrebbero implementare IDisposable, una interfaccia definita nel .NET Framework.

    Siccome la cosa è un poco delicata, ti suggerisco di cambiare la logica della tua classe, altrimenti, TANTI AUGURI E BUONA FORTUNA

    Pietro

  3. #3
    Utente bannato
    Registrato dal
    Mar 2002
    Messaggi
    1,811
    uhm. un'idea sarebbe quella di richiamare la connection.close in una sub ogni volta che si vuole chiudere
    solo che io vorrei fare le cose in automatico

    al posto di terminate c'è una sub che funce automaticamente al settaggio di oggetto = nothing?

    grazie

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da amodio
    uhm. un'idea sarebbe quella di richiamare la connection.close in una sub ogni volta che si vuole chiudere
    solo che io vorrei fare le cose in automatico

    al posto di terminate c'è una sub che funce automaticamente al settaggio di oggetto = nothing?

    grazie
    No!
    Nella procedura:
    1) apri la connessione
    2) fai quello che devi
    3) chiudi la connessione


    Ti assicuro che funziona, l'ho provato. L'unica cosa che devi fare è memorizzarti in un modulo la stringa di connessione.

    Pietro

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 © 2026 vBulletin Solutions, Inc. All rights reserved.