Udostępnij za pośrednictwem


Instruktaż: Utrwalanie obiektu (C# i Visual Basic)

Chociaż można ustawić właściwości obiektu do wartości domyślnych w czasie projektowania, wszelkie wartości wprowadzone w czasie wykonywania są tracone, kiedy niszczony jest obiekt.Aby utrwalić obiektu danych między wystąpieniami, które umożliwia przechowywanie wartości i pobierać je przy następnym uruchamianiu jest obiekt, można użyć serializacji.

[!UWAGA]

W języku Visual Basic do przechowywania danych proste, takie jak nazwisko lub numer, można My.Settings obiektu.Aby uzyskać więcej informacji, zobacz Obiekt My.Settings.

W tym instruktażu spowoduje utworzenie prostej Loan obiektu i utrzymują swoje dane do pliku.Będzie następnie pobrać dane z pliku, gdy po odtworzeniu obiektu.Wreszcie zmodyfikuje kodu do utrwalania obiektu w formacie protokołu SOAP.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

W tym przykładzie tworzy nowy plik, jeżeli plik jeszcze nie istnieje.Jeśli aplikacja musi utworzyć plik, należy tę aplikację Create uprawnienia do tego folderu.Uprawnienia są ustawione przy użyciu list kontroli dostępu.Jeżeli plik już istnieje, aplikacja potrzebuje jedynie Write uprawnień, uprawnienie mniejszym.W przypadku gdy jest to możliwe, jest bardziej bezpieczne do tworzenia pliku podczas wdrażania i przyznać jedynie Read uprawnienia do jednego pliku (zamiast tworzenia uprawnienia dotyczące folderu).Jest także bardziej bezpieczne do zapisu danych w folderach użytkownika niż do folderu głównego lub folderu Program Files.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

W tym przykładzie przechowuje dane w binarny lub plik w formacie protokołu SOAP.Formaty te nie stosuje się dla wrażliwych danych, takich jak hasła lub karty kredytowej.

[!UWAGA]

Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Aby zmienić ustawienia, kliknij przycisk Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.

Tworzenie obiektu pożyczki

Pierwszym krokiem jest utworzenie Loan klasy i aplikację testową, który używa tej klasy.

Aby utworzyć klasę pożyczki

  1. Utwórz nowy projekt Biblioteka klas i nadaj mu nazwę "LoanClass".Aby uzyskać więcej informacji, zobacz Tworzenie rozwiązań i projektów.

  2. W Solution Explorer, kliknij prawym przyciskiem myszy plik Class1 i kliknij przycisk Zmień nazwę.Zmień nazwę pliku do pożyczki i naciśnij klawisz ENTER.Zmiana nazwy pliku także zmienić klasy do Loan.

  3. Następujących członków publicznych należy dodać do klasy:

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

Trzeba będzie także tworzenie prostych aplikacji, która korzysta z Loan klasy.

Aby utworzyć aplikację testową

  1. Aby dodać projektu Windows Forms aplikacji do rozwiązania, w pliku menu, wskaż Dodaj, a następnie kliknij przycisk Nowy projekt.

  2. W Dodać nowy projekt okno dialogowe wprowadź LoanApp jako nazwę projektu, a następnie kliknij OK , aby zamknąć okno dialogowe.

  3. W Solution Explorer, zaznacz projekt, LoanApp.

  4. Na Projekt menu, kliknij przycisk ustawiony jako uruchomienia projektu.

  5. Na Projekt menu, kliknij przycisk Dodaj odwołanie.

  6. W Dodaj odwołanie okno dialogowe, kliknij przycisk projektów kartę i wybierz projekt LoanClass.

  7. Kliknij przycisk OK , aby zamknąć okno dialogowe.

  8. W projektancie, dodać cztery TextBox formantów do formularza.

  9. W edytorze kodu, Dodaj następujący kod:

    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. Dodawanie obsługi zdarzenia PropertyChanged zdarzenia do formularza przy użyciu następującego kodu:

    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.");
    }
    

W tym momencie można utworzyć i uruchomić aplikację.Należy zauważyć, że wartości domyślne z Loan klasy są wyświetlane w polach tekstowych.Spróbuj zmienić wartość stopy procentowej od 7,5 do 7.1, a następnie zamknij aplikację i ponownie uruchom — Przywraca wartości domyślne 7.5.

W świecie rzeczywistym stóp procentowych zmienić okresowo, ale niekoniecznie zawsze po uruchomieniu aplikacji.Zamiast realizować użytkownika aktualizacji stopy procentowej zawsze, że aplikacja zostanie uruchomiona, jest lepiej zachować najnowsze stopy procentowej między wystąpieniami aplikacji.W następnym kroku zostanie zrobić po prostu, dodając serializacji do klasy pożyczki.

Za pomocą serializacji utrzymują się obiekt

Aby utrwalić wartości dla klasy pożyczki, należy najpierw zaznaczyć klasy z Serializable atrybut.

Aby oznaczyć klasę jako możliwy do serializacji

  • Zmień deklarację klasy dla klasy pożyczki w następujący sposób:

    <Serializable()>
    Public Class Loan
    
    [Serializable()]
    public class Loan : System.ComponentModel.INotifyPropertyChanged
    {
    

Serializable Atrybut informuje kompilator, że wszystko w klasie mogą być pozostawione do pliku.Ponieważ PropertyChanged zdarzenie jest obsługiwane przez obiekt formularza systemu Windows, nie może być serializowany.NonSerialized Atrybut można oznaczyć elementy klas, które nie zostaną utrwalone.

Aby zapobiec poddany serializacji członka

  • Zmiany w deklaracji PropertyChanged zdarzenia w następujący sposób:

    <NonSerialized()>
    Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler _
      Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
    
    [field: NonSerialized()]
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    

Następnym krokiem jest dodanie kodu serializacji do aplikacji LoanApp.W celu serializować klasy i zapisać w pliku, będzie używać System.IO i System.Xml.Serialization obszarów nazw.Aby uniknąć wpisywania w pełni kwalifikowane nazwy, można dodać odwołania do bibliotek klasy niezbędne.

Aby dodać odwołanie do obszarów nazw

  • Dodaj następujące instrukcje w górnej części Form1 klasy:

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

    W tym przypadku używasz binarnych programu formatującego obiekt ma zostać zapisany w formacie binarnym.Później w tym instruktażu zmodyfikuje kodu obiekt ma zostać zapisany w formacie protokołu SOAP.

Następnym krokiem jest dodanie kodu do deserializacji obiektu z pliku, gdy tworzony jest obiekt.

Do deserializacji obiektu

  1. Dodać stałą do klasy dane serializowane nazwy pliku.

    Const FileName As String = "..\..\SavedLoan.bin"
    
    const string FileName = @"..\..\SavedLoan.bin";
    
  2. Zmodyfikuj kod w Form1_Load procedurę zdarzenia w następujący sposób:

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

    Należy zauważyć, że najpierw należy sprawdzić czy plik istnieje.Jeśli istnieje, Utwórz Stream klasy, aby odczytać plik binarny i BinaryFormatter klasy do tłumaczenia w pliku.Trzeba także konwertować z typu stream z typem obiektu pożyczki.

Następnie należy dodać kod, aby zapisać dane wprowadzane w polach tekstowych, aby Loan klasy, a następnie użytkownik musi serializować klasy w pliku.

Aby zapisać dane i serializować klasy

  • Dodaj następujący kod do Form1_FormClosing procedurę zdarzenia:

    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();
    }
    

W tym momencie można ponownie skompilować i uruchomić aplikację.Początkowo wartości domyślne są wyświetlane w polach tekstowych.Spróbuj zmienić wartości i wprowadź nazwę w czwartym polu tekstowym.Zamknij aplikację i uruchom go ponownie.Należy zauważyć, że są wyświetlane w polach tekstowych nowe wartości.

Utrwalanie obiektu przy użyciu formatu protokołu SOAP

W tym przykładzie wykazała tak dalece jak utrzymują obiekt do pliku tekstowego przy użyciu formatu binarnego.Format binarny jest poprawne dla większości aplikacji systemu Windows.Dla aplikacji sieci Web ani usług sieci Web chcesz utrwalić obiektu w pliku XML przy użyciu formatu protokołu SOAP, które sprawia, że obiekt jest łatwe udostępnianie.

Aby utrwalić obiektu na SOAP format, najpierw należy odwołać SoapFormatter klasy.SoapFormatter Klasa znajduje się w jego własnych nazw: System.Runtime.Serialization.Formatters.Soap.

Aby utrwalić obiektu przy użyciu formatu protokołu SOAP

  1. W Solution Explorer, zaznacz projekt, LoanApp.

  2. Na Projekt menu, kliknij przycisk Dodaj odwołanie.

  3. W Dodaj odwołanie okno dialogowe, kliknij przycisk .NET kartę i wybierz System.Runtime.Serialization.Formatters.Soap składnika.

  4. Kliknij przycisk OK , aby zamknąć okno dialogowe.

  5. W Edytor kodu, dodać następującą instrukcję w górnej części Form1 moduł:

    Imports System.Runtime.Serialization.Formatters.Soap
    
    using System.Runtime.Serialization.Formatters.Soap;
    
  6. Zmień nazwę pliku z SavedLoan.bin do SavedLoan.xml.

  7. W Form1_Load procedurę zdarzenia zmiany deklaracji deserializer zmiennej do następującego:

    Dim deserializer As New SoapFormatter
    
    SoapFormatter deserializer = new SoapFormatter();
    
  8. W Form1_FormClosing procedurę zdarzenia zmiany deklaracji serializer zmiennej do następującego:

    Dim serializer As New SoapFormatter
    
    SoapFormatter serializer = new SoapFormatter();
    

W tym momencie można zbudować i przetestować aplikację.Przy pierwszym uruchomieniu aplikacji, tworzony jest plik SavedLoan.xml.Zaznacz, aby wyświetlić plik Pokaż wszystkie pliki opcji w Solution Explorer; znajduje się w węźle Bin projektu aplikacji systemu Windows.

[!UWAGA]

Jeśli jesteś już w Pokaż wszystkie pliki trybie, należy odświeżyć widok, klikając Odśwież z widoku menu, aby wyświetlić plik.

Należy zauważyć, że trzech członków LoanClass są wyświetlane w formacie XML.Zmienić StopaProcentowa wartości w pliku XML, zapisz go, a następnie uruchom ponownie aplikację.Nowe stopy procentowej pojawia się w drugim polu tekstowym.

Zobacz też

Koncepcje

Podręcznik programowania C#

Inne zasoby

Serializacja (C# i Visual Basic)

Podręcznik programowania Visual Basic