Procedura dettagliata: Salvataggio permanente di un oggetto in Visual Studio (Visual Basic)Walkthrough: Persisting an Object in Visual Studio (Visual Basic)

Sebbene sia possibile impostare le proprietà di un oggetto sui valori predefiniti in fase di progettazione, tutti i valori immessi in fase di esecuzione vengono persi quando l'oggetto viene eliminato.Although you can set an object's properties to default values at design time, any values entered at run time are lost when the object is destroyed. È possibile usare la serializzazione per rendere persistenti i dati di un oggetto tra le istanze, consentendo di archiviare i valori e di recuperarli alla successiva creazione di un'istanza dell'oggetto.You can use serialization to persist an object's data between instances, which enables you to store values and retrieve them the next time that the object is instantiated.

Nota

In Visual Basic, per archiviare dati semplici, ad esempio un nome o numero, è possibile usare l'oggetto My.Settings.In Visual Basic, to store simple data, such as a name or number, you can use the My.Settings object. Per altre informazioni, vedere Oggetto My.Settings.For more information, see My.Settings Object.

In questa procedura verrà creato un oggetto Loan semplice i cui dati verranno resi persistenti in un file.In this walkthrough, you will create a simple Loan object and persist its data to a file. I dati verranno quindi recuperati dal file quando si ricrea l'oggetto.You will then retrieve the data from the file when you re-create the object.

Importante

Questo esempio crea un nuovo file, se il file non esiste.This example creates a new file, if the file does not already exist. Se un'applicazione deve creare un file, per tale applicazione deve essere disponibile l'autorizzazione Create per la cartella.If an application must create a file, that application must Create permission for the folder. Le autorizzazioni vengono impostate usando gli elenchi di controllo di accesso.Permissions are set by using access control lists. Se il file esiste già, per l'applicazione è necessaria solo l'autorizzazione Write, di livello inferiore.If the file already exists, the application needs only Write permission, a lesser permission. Se possibile, è più sicuro creare il file durante la distribuzione e concedere solo autorizzazioni Read per un singolo file, anziché autorizzazioni Create per una cartella.Where possible, it is more secure to create the file during deployment, and only grant Read permissions to a single file (instead of Create permissions for a folder). Inoltre, è più sicuro scrivere dati nelle cartelle utente anziché nella cartella radice o nella cartella dei file di programma.Also, it is more secure to write data to user folders than to the root folder or the Program Files folder.

Importante

In questo esempio i dati vengono archiviati in un file binario.This example stores data in a binary. Non usare questi formati per i dati riservati, ad esempio password o informazioni sulla carta di credito.These formats should not be used for sensitive data, such as passwords or credit-card information.

Nota

Le finestre di dialogo e i comandi di menu visualizzati potrebbero essere diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti .To change your settings, click Import and Export Settings on the Tools menu. Per altre informazioni, vedere Personalizzare l'IDE di Visual Studio.For more information, see Personalize the Visual Studio IDE.

Creare l'oggetto LoanCreating the Loan Object

Il primo passaggio consiste nel creare una classe Loan e un'applicazione di test che usa la classe.The first step is to create a Loan class and a test application that uses the class.

Per creare la classe LoanTo create the Loan class

  1. Creare un nuovo progetto di libreria di classi denominato "LoanClass".Create a new Class Library project and name it "LoanClass". Per altre informazioni, vedere Creazione di soluzioni e progetti.For more information, see Creating Solutions and Projects.

  2. In Esplora soluzioni aprire il menu di scelta rapida per il file Class1 e scegliere Rinomina.In Solution Explorer, open the shortcut menu for the Class1 file and choose Rename. Rinominare il file Loan e premere INVIO.Rename the file to Loan and press ENTER. Modificando il nome del file, anche la classe verrà rinominata Loan.Renaming the file will also rename the class to Loan.

  3. Aggiungere i seguenti membri pubblici alla classe:Add the following public members to the class:

    Public Class Loan  
        Implements System.ComponentModel.INotifyPropertyChanged  
    
        Public Property LoanAmount As Double  
        Public Property InterestRate As Double  
        Public Property Term As Integer  
    
        Private p_Customer As String  
        Public Property Customer As String  
            Get  
                Return p_Customer  
            End Get  
            Set(ByVal value As String)  
                p_Customer = value  
                RaiseEvent PropertyChanged(Me,  
                  New System.ComponentModel.PropertyChangedEventArgs("Customer"))  
            End Set  
        End Property  
    
        Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _  
          Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged  
    
        Public Sub New(ByVal loanAmount As Double,  
                       ByVal interestRate As Double,  
                       ByVal term As Integer,  
                       ByVal customer As String)  
    
            Me.LoanAmount = loanAmount  
            Me.InterestRate = interestRate  
            Me.Term = term  
            p_Customer = customer  
        End Sub  
    End Class  
    

Sarà anche necessario creare un'applicazione semplice che usa la classe Loan.You will also have to create a simple application that uses the Loan class.

Per creare un'applicazione di testTo create a test application

  1. Per aggiungere un progetto di Windows Form Application alla soluzione, nel menu File scegliere Aggiungi, Nuovo progetto.To add a Windows Forms Application project to your solution, on the File menu, choose Add,New Project.

  2. Scegliere Windows Forms Application nella finestra di dialogo Aggiungi nuovo progetto, quindi immettere LoanApp come nome del progetto e quindi fare clic su OK per chiudere la finestra di dialogo.In the Add New Project dialog box, choose Windows Forms Application, and enter LoanApp as the name of the project, and then click OK to close the dialog box.

  3. Scegliere il progetto LoanApp in Esplora soluzioni.In Solution Explorer, choose the LoanApp project.

  4. Nel menu Progetto scegliere Imposta come progetto di avvio.On the Project menu, choose Set as StartUp Project.

  5. Scegliere Aggiungi riferimento dal menu Progetto.On the Project menu, choose Add Reference.

  6. Nella finestra di dialogo Aggiungi riferimento scegliere la scheda Progetti e quindi il progetto LoanClass.In the Add Reference dialog box, choose the Projects tab and then choose the LoanClass project.

  7. Fare clic su OK per chiudere la finestra di dialogo.Click OK to close the dialog box.

  8. Nella finestra di progettazione aggiungere quattro controlli TextBox al form.In the designer, add four TextBox controls to the form.

  9. Nell'editor di codice aggiungere il seguente codice:In the Code Editor, add the following code:

    Private WithEvents TestLoan As New LoanClass.Loan(10000.0, 0.075, 36, "Neil Black")  
    
    Private Sub Form1_Load() Handles MyBase.Load  
        TextBox1.Text = TestLoan.LoanAmount.ToString  
        TextBox2.Text = TestLoan.InterestRate.ToString  
        TextBox3.Text = TestLoan.Term.ToString  
        TextBox4.Text = TestLoan.Customer  
    End Sub  
    
  10. Aggiungere al form un gestore eventi per l'evento PropertyChanged usando il codice seguente:Add an event handler for the PropertyChanged event to the form by using the following code:

    Public Sub CustomerPropertyChanged(  
          ByVal sender As Object,  
          ByVal e As System.ComponentModel.PropertyChangedEventArgs  
        ) Handles TestLoan.PropertyChanged  
    
        MsgBox(e.PropertyName & " has been changed.")  
    End Sub  
    

A questo punto, è possibile compilare ed eseguire l'applicazione.At this point, you can build and run the application. Si noti che i valori predefiniti della classe Loan vengono visualizzati nelle caselle di testo.Note that the default values from the Loan class appear in the text boxes. Provare a modificare il valore del tasso di interesse da 7.5 a 7.1, quindi chiudere l'applicazione ed eseguirla nuovamente: verrà ripristinato il valore predefinito 7.5.Try to change the interest-rate value from 7.5 to 7.1, and then close the application and run it again—the value reverts to the default of 7.5.

Nel mondo reale i tassi di interesse variano periodicamente, ma non necessariamente ogni volta che l'applicazione viene eseguita.In the real world, interest rates change periodically, but not necessarily every time that the application is run. Anziché fare in modo che l'utente aggiorni il tasso di interesse ogni volta che viene eseguita l'applicazione, è preferibile mantenere il tasso di interesse più recente tra le istanze dell'applicazione.Rather than making the user update the interest rate every time that the application runs, it is better to preserve the most recent interest rate between instances of the application. Nel passaggio successivo verrà eseguita questa operazione, aggiungendo la serializzazione alla classe Loan.In the next step, you will do just that by adding serialization to the Loan class.

Usare la serializzazione per la persistenza dell'oggettoUsing Serialization to Persist the Object

Per rendere persistenti i valori per la classe Loan, per prima cosa contrassegnare la classe con l'attributo Serializable.In order to persist the values for the Loan class, you must first mark the class with the Serializable attribute.

Per contrassegnare una classe come serializzabileTo mark a class as serializable

  • Modificare la dichiarazione della classe per la classe Loan come segue:Change the class declaration for the Loan class as follows:

    <Serializable()>  
    Public Class Loan  
    

L'attributo Serializable indica al compilatore che tutti gli elementi nella classe possono essere resi persistenti in un file.The Serializable attribute tells the compiler that everything in the class can be persisted to a file. Poiché l'evento PropertyChanged è gestito da un oggetto Windows Form, non può essere serializzato.Because the PropertyChanged event is handled by a Windows Form object, it cannot be serialized. L'attributo NonSerialized può essere usato per contrassegnare i membri della classe che non devono essere resi persistenti.The NonSerialized attribute can be used to mark class members that should not be persisted.

Per impedire la serializzazione di un membroTo prevent a member from being serialized

  • Modificare la dichiarazione per l'evento PropertyChanged come indicato di seguito:Change the declaration for the PropertyChanged event as follows:

    <NonSerialized()>  
    Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _  
      Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged  
    

Il passaggio successivo consiste nell'aggiungere il codice di serializzazione all'applicazione LoanApp.The next step is to add the serialization code to the LoanApp application. Per serializzare la classe e scriverla in un file, si useranno gli spazi dei nomi System.IO e System.Xml.Serialization.In order to serialize the class and write it to a file, you will use the System.IO and System.Xml.Serialization namespaces. Per evitare di digitare i nomi completi, è possibile aggiungere riferimenti alle librerie di classe necessarie.To avoid typing the fully qualified names, you can add references to the necessary class libraries.

Per aggiungere riferimenti agli spazi dei nomiTo add references to namespaces

  • Aggiungere le seguenti istruzioni all'inizio della classe Form1:Add the following statements to the top of the Form1 class:

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

    In questo caso, si usa un formattatore binario per salvare l'oggetto in formato binario.In this case, you are using a binary formatter to save the object in a binary format.

Il passaggio successivo consiste nell'aggiungere codice per deserializzare l'oggetto dal file quando viene creato l'oggetto.The next step is to add code to deserialize the object from the file when the object is created.

Per deserializzare un oggettoTo deserialize an object

  1. Aggiungere una costante alla classe per il nome del file di dati serializzati.Add a constant to the class for the serialized data's file name.

    Const FileName As String = "..\..\SavedLoan.bin"  
    
  2. Modificare il codice nella routine evento Form1_Load come indicato di seguito:Modify the code in the Form1_Load event procedure as follows:

    Private WithEvents TestLoan As New LoanClass.Loan(10000.0, 0.075, 36, "Neil Black")  
    
    Private Sub Form1_Load() 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  
    
        AddHandler TestLoan.PropertyChanged, AddressOf Me.CustomerPropertyChanged  
    
        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 prima verificare che il file esista.Note that you first must check that the file exists. Se esiste, creare una classe Stream per leggere il file binario e una classe BinaryFormatter per convertire il file.If it exists, create a Stream class to read the binary file and a BinaryFormatter class to translate the file. È anche necessario eseguire la conversione dal tipo di flusso al tipo di oggetto Loan.You also need to convert from the stream type to the Loan object type.

Successivamente è necessario aggiungere codice alla classe Loan per il salvataggio dei dati immessi nelle caselle di testo e quindi serializzare la classe in un file.Next you must add code to save the data entered in the text boxes to the Loan class, and then you must serialize the class to a file.

Per salvare i dati e serializzare la classeTo save the data and serialize the class

  • Aggiungere il codice seguente alla routine evento Form1_FormClosing:Add the following code to the Form1_FormClosing event procedure:

    Private Sub Form1_FormClosing() Handles MyBase.FormClosing  
        TestLoan.LoanAmount = CDbl(TextBox1.Text)  
        TestLoan.InterestRate = CDbl(TextBox2.Text)  
        TestLoan.Term = CInt(TextBox3.Text)  
        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, è nuovamente possibile compilare ed eseguire l'applicazione.At this point, you can again build and run the application. Inizialmente i valori predefiniti vengono visualizzati nelle caselle di testo.Initially, the default values appear in the text boxes. Provare a modificare i valori e immettere un nome nella quarta casella di testo.Try to change the values and enter a name in the fourth text box. Chiudere l'applicazione ed eseguirla nuovamente.Close the application and then run it again. Si noti che i nuovi valori ora appaiono nelle caselle di testo.Note that the new values now appear in the text boxes.

Vedere ancheSee also