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.
![]() |
---|
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. |
![]() |
---|
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. |
![]() |
---|
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
Creare un nuovo progetto Libreria di classi cui assegnare il nome LoanClass. Per ulteriori informazioni, vedere Procedura: creare soluzioni e progetti.
Nell'editor di codice modificare il nome della classe da Class1 in Loan.
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
Aggiungere un progetto Applicazione Windows alla soluzione scegliendo Aggiungi e quindi Nuovo progetto dal menu File.
Nella finestra di dialogo Aggiungi nuovo progetto immettere LoanApp come nome del progetto, quindi scegliere OK per chiudere la finestra di dialogo.
In Esplora soluzioni selezionare il progetto LoanApp.
Scegliere Imposta come progetto di avvio dal menu Progetto.
Scegliere Aggiungi riferimento dal menu Progetto.
Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda Progetti e selezionare il progetto LoanClass.
Scegliere OK per chiudere la finestra di dialogo.
Nella finestra di progettazione aggiungere quattro controlli TextBox al form.
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
Aggiungere una costante alla classe per il nome del file dei dati serializzati.
Const FileName As String = "SavedLoan.bin"
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
In Esplora soluzioni selezionare il progetto LoanApp.
Scegliere Aggiungi riferimento dal menu Progetto.
Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda .NET e selezionare il componente System.Runtime.Serialization.Formatters.Soap.
Scegliere OK per chiudere la finestra di dialogo.
Nell'editor di codice aggiungere un'istruzione Imports all'inizio del modulo Form1:
Imports System.Runtime.Serialization.Formatters.Soap
Modificare il nome file da SavedLoan.bin in SavedLoan.xml.
Nella routine evento Form1_Load modificare l'istruzione Dim da Dim deserializer As New BinaryFormatter in:
Dim deserializer As New SoapFormatter
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.
![]() |
---|
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