Návod: Uchování objektu (C# and Visual Basic)
Ačkoli v době návrhu můžete nastavit vlastnosti objektu na výchozí hodnoty, všechny hodnoty zadané v době běhu jsou ztraceny při zničení objektu.Serializace lze uchovat data objektu mezi instancí, které umožňuje ukládat hodnoty a načíst při příštím je vytvořena instance objektu.
[!POZNÁMKA]
V jazyce Visual Basic, ukládání dat jednoduché, jako je například název nebo číslo, můžete použít My.Settings objektu.Další informace naleznete v tématu My.Settings – objekt.
V tomto návodu je vytvořit jednoduchý Loan objektu a zachování jeho data do souboru.Pak bude načítat data ze souboru při znovu vytvořit objekt.Nakonec budete upravovat kód zachování objektu ve formátu protokolu SOAP.
Poznámka k zabezpečení |
---|
Tento příklad vytvoří nový soubor, pokud soubor již neexistuje.Pokud aplikace musí vytvořit soubor, musíte aplikaci Create oprávnění pro složku.Oprávnění jsou nastavena pomocí seznamů řízení přístupu.Pokud soubor již existuje, aplikace potřebuje pouze Write nižší oprávnění, oprávnění.Pokud je to možné, je bezpečnější soubor vytvořit během nasazení a udělit pouze Read oprávnění do jednoho souboru (namísto vytvoření oprávnění pro složky).Je také bezpečnější zapsat data do složek uživatele než do kořenové složky nebo do složky Program Files,. |
Poznámka k zabezpečení |
---|
Tento příklad uloží data do binárního souboru nebo souboru ve formátu protokolu SOAP.Tyto formáty se nedoporučují pro citlivá data, jako například hesla nebo informace o kreditní kartě. |
[!POZNÁMKA]
Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Chcete-li změnit nastavení, zvolte Import a Export nastavení v nabídce Nástroje.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.
Vytváření objektu půjčky
Prvním krokem je vytvoření Loan třídy a testovací aplikace, která používá třídu.
Vytvoření třídy půjčky
Vytvoření nového projektu knihovny třídy s názvem "LoanClass".Další informace naleznete v tématu Vytváření řešení a projektů.
V Aplikaci Solution Explorer, klepněte pravým tlačítkem myši na soubor Class1 a na Přejmenovat.Přejmenujte soubor na půjčky a stiskněte klávesu ENTER.Přejmenování souboru bude také přejmenovat třídy na Loan.
Přidejte následující členy veřejné třídy:
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
public class Loan : System.ComponentModel.INotifyPropertyChanged { public double LoanAmount {get; set;} public double InterestRate {get; set;} public int Term {get; set;} private string p_Customer; public string Customer { get { return p_Customer; } set { p_Customer = value; PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("Customer")); } } public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; public Loan(double loanAmount, double interestRate, int term, string customer) { this.LoanAmount = loanAmount; this.InterestRate = interestRate; this.Term = term; p_Customer = customer; } }
Také bude třeba vytvořit jednoduchou aplikaci, která používá Loan třídy.
Vytvořit testovací aplikace
Přidání model Windows Forms aplikace project do vašeho řešení na soubor nabídce přejděte na Přidata klepněte na tlačítko Nový projekt.
V Přidat nový projekt dialogovém okně zadejte LoanApp jako název projektu a klepněte na tlačítko OK zavřete dialogové okno.
V Aplikaci Solution Explorer, vyberte projekt LoanApp.
Na projektu nabídky, klepněte na tlačítko nastavit jako spuštění projektu.
V nabídce Projekt klepněte na příkaz Přidat odkaz.
V Přidat odkaz na dialogové okno, klepněte projekty kartu a vyberte projekt LoanClass.
Klepnutím na tlačítko OK zavřete dialogové okno.
V Návrháři přidejte čtyři TextBox ovládací prvky formuláře.
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
private LoanClass.Loan TestLoan = new LoanClass.Loan(10000.0, 0.075, 36, "Neil Black"); private void Form1_Load(object sender, EventArgs e) { textBox1.Text = TestLoan.LoanAmount.ToString(); textBox2.Text = TestLoan.InterestRate.ToString(); textBox3.Text = TestLoan.Term.ToString(); textBox4.Text = TestLoan.Customer; }
Přidejte obslužnou rutinu události pro PropertyChanged události 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
private void CustomerPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { MessageBox.Show(e.PropertyName + " has been changed."); }
V tomto okamžiku můžete vytvořit a spustit aplikaci.Všimněte si, že výchozí hodnoty z Loan v textových polích se zobrazují třídy.Pokuste se změnit hodnotu úrokové sazby z 7.5 na 7.1, ukončete aplikaci a znovu spustit – hodnota se vrátí na výchozí 7.5.
V reálném světě úrokové sazby změnit pravidelně, ale ne nutně při každém spuštění aplikace.Místo navazování uživatel aktualizovat při každém spuštění aplikace úroková sazba je lepší zachovat nejnovější úrokových sazeb mezi instancemi aplikace.V dalším kroku bude tímto způsobem provést přidáním serializace třídy půjčky.
Zachování objektu pomocí serializace
Pro trvalé hodnoty pro třídu půjčky, musíte nejprve označit třídu s Serializable atributu.
Chcete-li označit třídu jako serializovatelný
Deklarace třídy pro třídu půjčky změňte takto:
<Serializable()> Public Class Loan
[Serializable()] public class Loan : System.ComponentModel.INotifyPropertyChanged {
Serializable Atribut kompilátoru sděluje, že vše ve třídě lze uložených do souboru.Protože PropertyChanged událost je zpracována objekt formuláře systému Windows, nelze serializovat.NonSerialized Atribut lze použít k označení členy třídy, které by trvalé.
Zabránit serializovaný člen
Změna prohlášení PropertyChanged následující události:
<NonSerialized()> Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _ Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
[field: NonSerialized()] public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
Dalším krokem je přidání kódu pro serializaci LoanApp aplikaci.K serializaci třídy a zapsat do souboru, můžete použít System.IO a System.Xml.Serialization obory názvů.Chcete-li se vyhnout psaní plně kvalifikované názvy, můžete přidat odkazy do knihoven nezbytné třídy.
Přidat odkazy na obory názvů
Na začátek přidat následující příkazy Form1 třídy:
Imports System.IO Imports System.Runtime.Serialization.Formatters.Binary
using System.IO; using System.Runtime.Serialization.Formatters.Binary;
V tomto případě binární formátovací modul používáte objekt uložen v binárním formátu.Dále v tomto návodu budete upravovat kód uložte objekt ve formátu protokolu SOAP.
Dalším krokem je přidání kódu rekonstruovat objekt ze souboru při vytvoření objektu.
Při deserializaci objektu
Přidáte třídu pro název souboru Serializovaná datová konstanta.
Const FileName As String = "..\..\SavedLoan.bin"
const string FileName = @"..\..\SavedLoan.bin";
Upravit kód v Form1_Load proceduru události takto:
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
private LoanClass.Loan TestLoan = new LoanClass.Loan(10000.0, 0.075, 36, "Neil Black"); private void Form1_Load(object sender, EventArgs e) { if (File.Exists(FileName)) { Stream TestFileStream = File.OpenRead(FileName); BinaryFormatter deserializer = new BinaryFormatter(); TestLoan = (LoanClass.Loan)deserializer.Deserialize(TestFileStream); TestFileStream.Close(); } TestLoan.PropertyChanged += this.CustomerPropertyChanged; textBox1.Text = TestLoan.LoanAmount.ToString(); textBox2.Text = TestLoan.InterestRate.ToString(); textBox3.Text = TestLoan.Term.ToString(); textBox4.Text = TestLoan.Customer; }
Všimněte si, že je nejprve nutné zkontrolovat, zda soubor existuje.Pokud existuje, vytvořit Stream číst binární soubor třídy a a BinaryFormatter třídy přeložit soubor.Také je nutné převést na typ objektu půjčky typ datového proudu.
Dále je nutné přidat kód uložit data zadaná do textových polí Loan třídy a pak musí serializovat třídy do souboru.
Uložit data a serializaci třídy
Přidejte následující kód Form1_FormClosing proceduru události:
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
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { TestLoan.LoanAmount = Convert.ToDouble(textBox1.Text); TestLoan.InterestRate = Convert.ToDouble(textBox2.Text); TestLoan.Term = Convert.ToInt32(textBox3.Text); TestLoan.Customer = textBox4.Text; Stream TestFileStream = File.Create(FileName); BinaryFormatter serializer = new BinaryFormatter(); serializer.Serialize(TestFileStream, TestLoan); TestFileStream.Close(); }
V tomto okamžiku můžete znovu sestavit a spustit aplikaci.Zpočátku zobrazí výchozí hodnoty do textových polí.Zkuste změnit hodnoty a čtvrtého textového pole zadejte název.Ukončete aplikaci a znovu spustit.Poznámka: nyní zobrazí nové hodnoty do textových polí.
Odchyluje objektu pomocí formátu SOAP
Pokud tento příklad ukázala, jak uchovat objektu do textového souboru pomocí binárního formátu.Binární formát je v pořádku pro většinu aplikací systému Windows.U webových aplikací a webových služeb můžete přetrvávají objektu do souboru XML pomocí formátu SOAP, který usnadňuje sdílení objektu.
Pro objekt do formátu SOAP přetrvávat, musí nejprve odkaz SoapFormatter třídy.SoapFormatter Třída nachází ve vlastní obor názvů: System.Runtime.Serialization.Formatters.Soap.
Zachování objektu pomocí formátu SOAP
V Aplikaci Solution Explorer, vyberte projekt LoanApp.
V nabídce Projekt klepněte na příkaz Přidat odkaz.
V Přidat odkaz na dialogové okno, klepněte .NET kartu a vyberte System.Runtime.Serialization.Formatters.Soap komponent.
Klepnutím na tlačítko OK zavřete dialogové okno.
V Editor kódu, přidejte tento příkaz do horní části Form1 modulu:
Imports System.Runtime.Serialization.Formatters.Soap
using System.Runtime.Serialization.Formatters.Soap;
Změňte název souboru z SavedLoan.bin na SavedLoan.xml.
V Form1_Load proceduru události prohlášení změnit deserializer následující proměnné:
Dim deserializer As New SoapFormatter
SoapFormatter deserializer = new SoapFormatter();
V Form1_FormClosing proceduru události prohlášení změnit serializer následující proměnné:
Dim serializer As New SoapFormatter
SoapFormatter serializer = new SoapFormatter();
V tomto okamžiku můžete sestavit a testování aplikace.Při prvním spuštění aplikace, je vytvořen soubor SavedLoan.xml.Chcete-li zobrazit soubor, vyberte Zobrazit všechny soubory volbu v Aplikaci Solution Explorer; nachází se v uzlu přihrádky pro projekt aplikace systému Windows.
[!POZNÁMKA]
Pokud jste již v Zobrazit všechny soubory režimu, musíte aktualizovat zobrazení klepnutím na aktualizace z zobrazení nabídky zobrazíte soubor.
Všimněte si, že tři členové LoanClass jsou zobrazeny ve formátu XML.Změnit hodnotu v souboru XML úroková_míra, uložte jej a spusťte znovu aplikaci.V druhé textové pole se zobrazí nové úrokové sazby.