Sdílet prostřednictvím


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í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í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

  1. Vytvoření nového projektu knihovny třídy s názvem "LoanClass".Další informace naleznete v tématu Vytváření řešení a projektů.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. V Aplikaci Solution Explorer, vyberte projekt LoanApp.

  4. Na projektu nabídky, klepněte na tlačítko nastavit jako spuštění projektu.

  5. V nabídce Projekt klepněte na příkaz Přidat odkaz.

  6. V Přidat odkaz na dialogové okno, klepněte projekty kartu a vyberte projekt LoanClass.

  7. Klepnutím na tlačítko OK zavřete dialogové okno.

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

  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
    
    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;
    }
    
  10. 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

  1. Přidáte třídu pro název souboru Serializovaná datová konstanta.

    Const FileName As String = "..\..\SavedLoan.bin"
    
    const string FileName = @"..\..\SavedLoan.bin";
    
  2. 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

  1. V Aplikaci Solution Explorer, vyberte projekt LoanApp.

  2. V nabídce Projekt klepněte na příkaz Přidat odkaz.

  3. V Přidat odkaz na dialogové okno, klepněte .NET kartu a vyberte System.Runtime.Serialization.Formatters.Soap komponent.

  4. Klepnutím na tlačítko OK zavřete dialogové okno.

  5. 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;
    
  6. Změňte název souboru z SavedLoan.bin na SavedLoan.xml.

  7. 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();
    
  8. 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.

Viz také

Koncepty

Průvodce programováním v C#

Další zdroje

Serializace (C# and Visual Basic)

Příručka k programování v jazyce Visual Basic