Condividi tramite


Procedura dettagliata: rendere persistente un oggetto in Visual Basic

Aggiornamento: novembre 2007

Sebbene sia possibile impostare le proprietà di un oggetto sui valori predefiniti in fase di progettazione, tutti i valori immessi in fase di esecuzione verranno persi alla distruzione dell'oggetto. In Visual Basic è possibile utilizzare la serializzazione per rendere persistenti i dati di un oggetto tra le istanze consentendo la memorizzazione e il recupero dei valori alla successiva creazione di un'istanza dell'oggetto.

Per la memorizzazione di dati semplici, quali un nome o un numero, è possibile servirsi dell'oggetto My.Settings. Per ulteriori informazioni, vedere Oggetto My.Settings.

In questa procedura dettagliata, si creerà un oggetto Loan semplice e si salveranno in modo permanente i dati in un file. Quindi, i dati verranno recuperati dal file quando l'oggetto viene ricreato. Alla fine, verrà modificato il codice per salvare in modo permanente l'oggetto in un formato SOAP.

Nota sulla sicurezza:

Se il file non esiste, ne viene creato uno nuovo nell'esempio. Per poter creare un file in un'applicazione, è necessario che l'applicazione disponga di un'autorizzazione di tipo Create per la cartella. Le autorizzazioni vengono impostate tramite gli elenchi di controllo di accesso. Se il file è già esistente, l'applicazione necessita solo di un'autorizzazione di tipo Write, ossia di un'autorizzazione inferiore. Se possibile, è più sicuro creare il file durante la fase di distribuzione e concedere solo autorizzazioni Read a un unico file, anziché autorizzazioni di tipo Create per una cartella. È inoltre più sicuro scrivere i dati nelle cartelle utente anziché nella cartella principale o nella cartella Programmi.

Nota sulla sicurezza:

Nell'esempio i dati vengono memorizzati in file in formato binario o SOAP. Si consiglia di non utilizzare questi formati per dati riservati, quali password o informazioni sulle carte di credito.

Nota:

Le finestre di dialogo e i comandi di menu visualizzati potrebbero variare rispetto a quanto descritto nella Guida in linea in base alle impostazioni o all'edizione in uso. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Creazione dell'oggetto Loan

Il primo passaggio consiste nella creazione di una classe Loan e di un'applicazione di prova che utilizzi tale classe.

Per creare la classe Loan

  1. Creare un nuovo progetto Libreria di classi cui assegnare il nome LoanClass. Per ulteriori informazioni, vedere Procedura: creare soluzioni e progetti.

  2. Nell'editor di codice modificare il nome della classe da Class1 in Loan.

  3. Aggiungere i seguenti membri pubblici alla classe:

    Public LoanAmount As Double = 10000.0
    Public InterestRate As Double = 7.5
    Public Term As Integer = 36
    Public Customer As String
    

Sarà inoltre necessario creare un'applicazione semplice in cui venga utilizzata la classe Loan.

Per creare un'applicazione di test

  1. Aggiungere un progetto Applicazione Windows alla soluzione scegliendo Aggiungi e quindi Nuovo progetto dal menu File.

  2. Nella finestra di dialogo Aggiungi nuovo progetto immettere LoanApp come nome del progetto, quindi scegliere OK per chiudere la finestra di dialogo.

  3. In Esplora soluzioni selezionare il progetto LoanApp.

  4. Scegliere Imposta come progetto di avvio dal menu Progetto.

  5. Scegliere Aggiungi riferimento dal menu Progetto.

  6. Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda Progetti e selezionare il progetto LoanClass.

  7. Scegliere OK per chiudere la finestra di dialogo.

  8. Nella finestra di progettazione aggiungere quattro controlli TextBox al form.

  9. Nell'editor di codice aggiungere il seguente codice:

    Private TestLoan As New LoanClass.Loan
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

A questo punto è possibile generare ed eseguire l'applicazione. Nelle caselle di testo verranno visualizzati i valori predefiniti della classe Loan. Provare a modificare il valore relativo al tasso d'interesse da 7.5 in 7.1, quindi chiudere l'applicazione ed eseguirla nuovamente. Verrà ripristinato il valore predefinito 7.5.

Nel mondo reale i tassi d'interesse variano periodicamente, ma non necessariamente ogni volta che si esegue l'applicazione. Anziché fare in modo che l'utente aggiorni il tasso d'interesse a ogni esecuzione dell'applicazione, è preferibile mantenere il valore relativo al tasso d'interesse più recente tra le istanze dell'applicazione. Tale operazione verrà effettuata nel passaggio successivo aggiungendo la serializzazione alla classe Loan.

Utilizzo della serializzazione per garantire la persistenza dell'oggetto

Per garantire la persistenza dei valori della classe Loan, è necessario contrassegnare dapprima la classe con l'attributo Serializable.

Per contrassegnare la classe come serializzabile

  • Modificare la dichiarazione della classe Loan nel modo seguente:

    <Serializable()> Public Class Loan
    

L'attributo Serializable indica al compilatore che tutti i dati presenti nella classe possono essere resi persistenti in un file. Nel caso specifico, si desidera rendere persistente solo il membro InterestRate e non il membro Customer, LoanAmount o Period. È possibile utilizzare l'attributo NonSerialized per contrassegnare i membri della classe che non devono essere resi persistenti. Per semplicità, nell'esempio vengono resi persistenti tutti gli elementi, ad eccezione del membro Customer.

Per impedire la serializzazione di un membro

  • Modificare la dichiarazione del membro Customer nel modo seguente:

    <NonSerialized()> Public Customer As String
    

Il passaggio successivo consiste nell'aggiungere il codice della serializzazione all'applicazione LoanApp. Per poter serializzare la classe e scriverla in un file, verranno utilizzati gli spazi dei nomi System.IO e System.Xml.Serialization. Per evitare di digitare i nomi completi, è possibile utilizzare l'istruzione Imports.

Per aggiungere riferimenti agli spazi dei nomi

  • Aggiungere le seguenti istruzioni Imports all'inizio della classe Form1:

    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    

    In questo caso viene utilizzato un formattatore binario per salvare l'oggetto in un formato binario. Più avanti nella procedura dettagliata il codice verrà modificato per salvare l'oggetto in un formato SOAP.

Il passaggio successivo consiste nell'aggiungere il codice per deserializzare l'oggetto dal file durante la creazione dell'oggetto.

Per deserializzare un oggetto

  1. Aggiungere una costante alla classe per il nome del file dei dati serializzati.

    Const FileName As String = "SavedLoan.bin"
    
  2. Modificare il codice della routine eventi Form1_Load come riportato di seguito.

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        If File.Exists(FileName) Then
            Dim TestFileStream As Stream = File.OpenRead(FileName)
            Dim deserializer As New BinaryFormatter
            TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan)
            TestFileStream.Close()
        End If
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

    Si noti che è necessario dapprima verificare che il file esiste. Se il file esiste, creare una classe Stream per leggere il file binario e una classe BinaryFormatter per convertire il file. Il metodo CType viene utilizzato per effettuare la conversione dal flusso al tipo di oggetto Loan.

Sarà quindi necessario aggiungere il codice per salvare nella classe Loan i dati immessi nelle caselle di testo e serializzare la classe in un file.

Per salvare i dati e serializzare la classe

  • Aggiungere alla routine eventi Form1_Closing il codice riportato di seguito.

    Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As _
    System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TestLoan.LoanAmount = CType(TextBox1.Text, Double)
        TestLoan.InterestRate = CType(TextBox2.Text, Double)
        TestLoan.Term = CType(TextBox3.Text, Integer)
        TestLoan.Customer = TextBox4.Text
    
        Dim TestFileStream As Stream = File.Create(FileName)
        Dim serializer As New BinaryFormatter
        serializer.Serialize(TestFileStream, TestLoan)
        TestFileStream.Close()
    End Sub
    

A questo punto è di nuovo possibile compilare ed eseguire l'applicazione. Nelle caselle di testo verranno inizialmente visualizzati i valori predefiniti. Provare a cambiare i valori e immettere un nome nella quarta casella di testo. Chiudere l'applicazione ed eseguirla nuovamente. Le caselle di testo riportano ora i nuovi valori, ad eccezione del nome del cliente in quanto contrassegnato come NonSerialized.

Persistenza dell'oggetto tramite un formato SOAP

Nell'esempio sopra riportato è stato spiegato come garantire la persistenza di un oggetto in un file di testo utilizzando un formato binario. Tale formato è appropriato per la maggior parte delle applicazioni Windows. Nel caso delle applicazioni Web o dei servizi Web XML potrebbe essere opportuno garantire la persistenza dell'oggetto in un file XML utilizzando un formato SOAP, per agevolare la condivisione dell'oggetto.

Per poter garantire la persistenza dell'oggetto in un formato SOAP, è necessario dapprima fare riferimento alla classe SoapFormatter. La classe SoapFormatter si trova nel relativo spazio dei nomi, ovvero System.Runtime.Serialization.Formatters.Soap.

Per salvare in modo permanente l'oggetto utilizzando un formato SOAP

  1. In Esplora soluzioni selezionare il progetto LoanApp.

  2. Scegliere Aggiungi riferimento dal menu Progetto.

  3. Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda .NET e selezionare il componente System.Runtime.Serialization.Formatters.Soap.

  4. Scegliere OK per chiudere la finestra di dialogo.

  5. Nell'editor di codice aggiungere un'istruzione Imports all'inizio del modulo Form1:

    Imports System.Runtime.Serialization.Formatters.Soap
    
  6. Modificare il nome file da SavedLoan.bin in SavedLoan.xml.

  7. Nella routine evento Form1_Load modificare l'istruzione Dim da Dim deserializer As New BinaryFormatter in:

    Dim deserializer As New SoapFormatter
    
  8. Nella routine evento Form1_Closing modificare l'istruzione Dim da Dim serializer As New BinaryFormatter in:

    Dim serializer As New SoapFormatter
    

A questo punto è possibile generare e testare l'applicazione. Quando si esegue per la prima volta l'applicazione, viene creato il file SavedLoan.xml. Per visualizzare il file, scegliere Mostra tutti i file in Esplora soluzioni. Il file risiederà nel nodo Bin del progetto Applicazione Windows.

Nota:

Se è già stata attivata la modalità Mostra tutti i file, per visualizzare il file sarà necessario aggiornare la visualizzazione scegliendo Aggiorna dal menu Visualizza.

I tre membri di LoanClass sono visualizzati in formato XML. Cambiare il valore di InterestRate nel file XML, quindi salvare il file ed eseguire nuovamente l'applicazione. Il nuovo valore del tasso d'interesse verrà visualizzato nella seconda casella di testo.

Vedere anche

Concetti

Equivalenti PropertyBag per gli utenti di Visual Basic 6.0

Nozioni fondamentali sulla serializzazione di .NET Framework