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
Vytvořte nový projekt knihovny tříd a pojmenováte ho LoanClass. Další informace najdete v tématu Vytváření řešení a projektů.
V Průzkumník řešení otevřete místní nabídku pro soubor Class1 a zvolte Přejmenovat. Přejmenujte soubor na a
Loanstiskněte ENTER. Přejmenováním souboru se také třída přejmenuje naLoan.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
Pokud chcete do Windows přidat projekt formulářové aplikace, zvolte v nabídce Soubor možnost Přidat **,**Nový Project.
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
LoanAppzavřete.V Průzkumník řešení vyberte projekt LoanApp.
V nabídce Project vyberte Nastavit jako po spuštění Project.
V nabídce Project vyberte Přidat odkaz.
V dialogovém okně Přidat odkaz zvolte kartu Projekty a pak zvolte projekt LoanClass.
Kliknutím na OK zavřete dialogové okno.
V návrháři přidejte do TextBox formuláře čtyři ovládací prvky.
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 SubPřidejte obslužnou
PropertyChangedrutinu 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
PropertyChangeddeklaraci 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í
Form1příkazy:Imports System.IO Imports System.Runtime.Serialization.Formatters.BinaryV 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
Přidejte konstantu do třídy pro název souboru serializovaná data.
Const FileName As String = "..\..\SavedLoan.bin"Kód v
Form1_Loadproceduř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 SubVš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_FormClosingpř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.