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.
![]() |
---|
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. |
![]() |
---|
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
Utwórz nowy projekt Biblioteka klas i nadaj mu nazwę "LoanClass".Aby uzyskać więcej informacji, zobacz Tworzenie rozwiązań i projektów.
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.
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ą
Aby dodać projektu Windows Forms aplikacji do rozwiązania, w pliku menu, wskaż Dodaj, a następnie kliknij przycisk Nowy projekt.
W Dodać nowy projekt okno dialogowe wprowadź LoanApp jako nazwę projektu, a następnie kliknij OK , aby zamknąć okno dialogowe.
W Solution Explorer, zaznacz projekt, LoanApp.
Na Projekt menu, kliknij przycisk ustawiony jako uruchomienia projektu.
Na Projekt menu, kliknij przycisk Dodaj odwołanie.
W Dodaj odwołanie okno dialogowe, kliknij przycisk projektów kartę i wybierz projekt LoanClass.
Kliknij przycisk OK , aby zamknąć okno dialogowe.
W projektancie, dodać cztery TextBox formantów do formularza.
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; }
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
Dodać stałą do klasy dane serializowane nazwy pliku.
Const FileName As String = "..\..\SavedLoan.bin"
const string FileName = @"..\..\SavedLoan.bin";
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
W Solution Explorer, zaznacz projekt, LoanApp.
Na Projekt menu, kliknij przycisk Dodaj odwołanie.
W Dodaj odwołanie okno dialogowe, kliknij przycisk .NET kartę i wybierz System.Runtime.Serialization.Formatters.Soap składnika.
Kliknij przycisk OK , aby zamknąć okno dialogowe.
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;
Zmień nazwę pliku z SavedLoan.bin do SavedLoan.xml.
W Form1_Load procedurę zdarzenia zmiany deklaracji deserializer zmiennej do następującego:
Dim deserializer As New SoapFormatter
SoapFormatter deserializer = new SoapFormatter();
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.