Návod: Uchování objektu v Visual Studio (Visual Basic)

I když můžete nastavit vlastnosti objektu na výchozí hodnoty v době návrhu, všechny hodnoty zadané za běhu se při zničení objektu ztratí. Serializace můžete použít k zachování dat objektu mezi instancemi, který umožňuje ukládat hodnoty a načíst je při příštím vytvoření instance objektu.

Poznámka

K Visual Basic jednoduchých dat, jako je název nebo číslo, můžete použít My.Settings objekt . Další informace najdete v tématu Objekt My.Nastavení.

V tomto názorném postupu vytvoříte jednoduchý objekt a Loan zachováte jeho data do souboru. Při opětovném vytvoření objektu pak načtete data ze souboru .

Důležité

Tento příklad vytvoří nový soubor, pokud soubor ještě neexistuje. Pokud aplikace musí vytvořit soubor, musí mít tato aplikace Create oprávnění ke složce. Oprávnění se nastavuje pomocí seznamů řízení přístupu. Pokud soubor již existuje, aplikace potřebuje pouze Write oprávnění, menší oprávnění. Tam, kde je to možné, je bezpečnější vytvořit soubor během nasazování a udělit oprávnění pouze jednomu souboru (místo oprávnění Vytvořit Read pro složku). Kromě toho je bezpečnější zapisovat data do uživatelských složek než do kořenové složky nebo do složky Program Files.

Důležité

Tento příklad ukládá data v binárním souboru. Tyto formáty by se neměly používat pro citlivá data, jako jsou hesla nebo informace o platební kartě.

Poznámka

Dialogová okna a příkazy nabídek, které vidíte, se mohou lišit od těch popsaných v nápovědě v závislosti na aktivních nastaveních nebo edici. Pokud chcete nastavení změnit, klikněte na Importovat a Nastavení v nabídce Nástroje. Další informace najdete v tématu Přizpůsobení integrovaného vývojového Visual Studio .

Vytvoření objektu Loan

Prvním krokem je vytvoření třídy Loan a testovací aplikace, která používá třídu .

Vytvoření třídy Loan

  1. Vytvořte nový projekt knihovny tříd a pojmenováte ho LoanClass. Další informace najdete v tématu Vytváření řešení a projektů.

  2. V Průzkumník řešení otevřete místní nabídku pro soubor Class1 a zvolte Přejmenovat. Přejmenujte soubor na a Loan stiskněte ENTER. Přejmenováním souboru se také třída přejmenuje na Loan .

  3. Do třídy přidejte následující veřejné členy:

    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  
    

Budete také muset vytvořit jednoduchou aplikaci, která používá Loan třídu .

Vytvoření testovací aplikace

  1. Pokud chcete do Windows přidat projekt formulářové aplikace, zvolte v nabídce Soubor možnost Přidat **,**Nový Project.

  2. V dialogovém okně Project nový projekt zvolte Windows Formulářová aplikace, jako název projektu zadejte a pak kliknutím na OK dialogové okno LoanApp zavřete.

  3. V Průzkumník řešení vyberte projekt LoanApp.

  4. V nabídce Project vyberte Nastavit jako po spuštění Project.

  5. V nabídce Project vyberte Přidat odkaz.

  6. V dialogovém okně Přidat odkaz zvolte kartu Projekty a pak zvolte projekt LoanClass.

  7. Kliknutím na OK zavřete dialogové okno.

  8. V návrháři přidejte do TextBox formuláře čtyři ovládací prvky.

  9. V Editoru kódu přidejte následující kód:

    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. Přidejte obslužnou PropertyChanged rutinu události pro událost do formuláře pomocí následujícího kódu:

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

V tuto chvíli můžete aplikaci sestavit a spustit. Všimněte si, že výchozí hodnoty Loan z třídy se zobrazí v textových polích. Zkuste změnit hodnotu úrokové sazby z 7,5 na 7,1 a pak aplikaci zavřete a znovu ji spusťte – hodnota se vrátí na výchozí hodnotu 7,5.

V reálném světě se úroková sazba pravidelně mění, ale ne nutně při každém spuštění aplikace. Místo toho, aby uživatel při každém spuštění aplikace aktualizovat úrokovou sazbu, je lepší zachovat nejnovější úrokovou sazbu mezi instancemi aplikace. V dalším kroku to budete dělat tak, že přidáte serializaci do třídy Loan.

Použití serializace k zachování objektu

Pokud chcete zachovat hodnoty třídy Loan, musíte nejprve označit třídu Serializable atributem .

Označení třídy jako serializovatelné

  • Změňte deklaraci třídy pro třídu Loan následujícím způsobem:

    <Serializable()>  
    Public Class Loan  
    

Atribut Serializable říká kompilátoru, že vše ve třídě lze zachovat do souboru. Vzhledem k PropertyChanged tomu, že událost je zpracována objektem Windows Form, nelze serializovat. Atribut NonSerialized lze použít k označení členů třídy, které by neměly být zachovány.

Chcete-li zabránit člena serializován

  • Následujícím způsobem změňte PropertyChanged deklaraci události:

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

Dalším krokem je přidání kódu serializace do aplikace LoanApp. Chcete-li serializovat třídu a zapsat ji do souboru, budete používat obory názvů a System.IO System.Xml.Serialization . Pokud se chcete vyhnout zadávání plně kvalifikovaných názvů, můžete přidat odkazy na potřebné knihovny tříd.

Přidání odkazů do oborů názvů

  • Na začátek třídy přidejte následující Form1 příkazy:

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

    V tomto případě používáte binární formátovací modul k uložení objektu v binárním formátu.

Dalším krokem je přidání kódu pro deserializaci objektu ze souboru při vytvoření objektu.

K deserializaci objektu

  1. Přidejte konstantu do třídy pro název souboru serializovaná data.

    Const FileName As String = "..\..\SavedLoan.bin"  
    
  2. Kód v Form1_Load proceduře události upravte následujícím způsobem:

    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  
    

    Všimněte si, že nejprve musíte zkontrolovat, že soubor existuje. Pokud existuje, vytvořte třídu Stream pro čtení binárního souboru a třídu BinaryFormatter pro překlad souboru. Musíte také převést typ datového proudu na typ objektu Loan.

Dále je nutné přidat kód pro uložení dat zadaných do textových polí do třídy a poté je nutné Loan serializovat třídu do souboru.

Uložení dat a serializace třídy

  • Do procedury události Form1_FormClosing přidejte následující kód:

    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  
    

V tuto chvíli můžete aplikaci znovu sestavit a spustit. Na začátku se v textových polích zobrazí výchozí hodnoty. Zkuste změnit hodnoty a zadat název do čtvrtého textového pole. Zavřete aplikaci a pak ji znovu spusťte. Všimněte si, že nové hodnoty se teď zobrazují v textových polích.

Viz také