Freigeben über


Exemplarische Vorgehensweise: Beibehalten eines Objekts in Visual Basic

Aktualisiert: November 2007

Die Eigenschaften eines Objekts lassen sich zwar zur Entwurfszeit auf einen Standardwert festlegen, zur Laufzeit eingegebene Werte gehen jedoch beim Zerstören des Objekts verloren. Sie können die Serialisierung in Visual Basic verwenden, um die Daten eines Objekts zwischen Instanzen beizubehalten. Dadurch können Werte gespeichert und bei der nächsten Instanziierung des Objekts abgerufen werden.

Zum Speichern einfacher Daten, z. B. eines Namens oder einer Zahl, können Sie das My.Settings-Objekt verwenden. Weitere Informationen finden Sie unter My.Settings-Objekt.

In dieser exemplarischen Vorgehensweise wird ein einfaches Loan-Objekt erstellt und dessen Daten in einer Datei beibehalten. Die Daten werden aus der Datei abgerufen, wenn das Objekt neu erstellt wird. Abschließend wird der Code geändert, um das Objekt in einem SOAP-Format beizubehalten.

Sicherheitshinweis:

Mit diesem Beispiel wird eine neue Datei erstellt, wenn diese noch nicht vorhanden ist. Zum Erstellen von Dateien benötigt eine Anwendung die Create-Berechtigung für den Ordner. Berechtigungen werden mit Zugriffssteuerungslisten festgelegt. Wenn die Datei bereits vorhanden ist, benötigt die Anwendung lediglich eine (geringere) Write-Berechtigung. Aus Sicherheitsgründen sollte die Datei während der Bereitstellung erstellt werden. Außerdem sollte nur die Read-Berechtigung für eine einzelne Datei erteilt werden (statt der Erstellungsberechtigungen für einen Ordner). Ferner ist es sicherer, Daten in Benutzerordner statt in den Stammordner oder den Ordner mit den Programmdateien zu schreiben.

Sicherheitshinweis:

In diesem Beispiel werden Daten in eine Datei mit binärem oder SOAP-Format geschrieben. Diese Formate dürfen nicht für vertrauliche Daten, z. B. Kennwörter oder Kreditkarteninformationen, verwendet werden.

Hinweis:

Je nach den aktiven Einstellungen oder der verwendeten Version können sich die angezeigten Dialogfelder und Menübefehle von den in der Hilfe beschriebenen unterscheiden. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Erstellen des Loan-Objekts

Zunächst wird eine Loan-Klasse erstellt und dann eine Testanwendung, die die Klasse verwendet.

So erstellen Sie die Loan-Klasse

  1. Erstellen Sie ein neues Class Library-Projekt, und nennen Sie es "LoanClass". Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Projektmappen und Projekten.

  2. Ändern Sie im Code-Editor den Namen der Klasse von "Class1" in "Loan".

  3. Fügen Sie der Klasse die folgenden öffentlichen Member hinzu:

    Public LoanAmount As Double = 10000.0
    Public InterestRate As Double = 7.5
    Public Term As Integer = 36
    Public Customer As String
    

Sie müssen ebenfalls eine einfache Anwendung erstellen, die die Loan-Klasse verwendet.

So erstellen Sie eine Testanwendung

  1. Um der Projektmappe ein Windows-Anwendungsprojekt hinzufügen, zeigen Sie im Menü Datei auf Hinzufügen und klicken anschließend auf Neues Projekt.

  2. Geben Sie im Dialogfeld Neues Projekt hinzufügenLoanApp als Namen für das Projekt ein, und klicken Sie auf OK, um das Dialogfeld zu schließen.

  3. Wählen Sie im Projektmappen-Explorer das LoanApp-Projekt aus.

  4. Klicken Sie im Menü Projekt auf Als Startprojekt festlegen.

  5. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

  6. Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte Projekte, und wählen Sie das Projekt LoanClass aus.

  7. Klicken Sie auf OK, um das Dialogfeld zu schließen.

  8. Fügen Sie im Designer vier TextBox-Steuerelemente in das Formular ein.

  9. Fügen Sie im Code-Editor folgenden Code hinzu:

    Private TestLoan As New LoanClass.Loan
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

An diesem Punkt können Sie die Anwendung erstellen und ausführen. Die Standardwerte aus der Loan-Klasse werden in den Textfeldern angezeigt. Ändern Sie den Zinssatz versuchsweise von 7,5 auf 7,1, schließen Sie dann die Anwendung, und führen Sie sie erneut aus. Der Wert wird auf die Standardeinstellung 7,5 zurückgesetzt.

In der Praxis werden Zinssätze in regelmäßigen Abständen geändert, jedoch nicht bei jeder Ausführung der Anwendung. Anstatt den Zinssatz bei jeder Ausführung der Anwendung vom Benutzer aktualisieren zu lassen, kann der aktuelle Zinssatz zwischen den Instanzen der Anwendung beibehalten werden. Im nächsten Schritt tun Sie genau das, indem Sie der Loan-Klasse die Funktion der Serialisierung hinzufügen.

Beibehalten des Objekts mithilfe der Serialisierung

Damit die Werte für die Loan-Klasse erhalten bleiben, müssen Sie die Klasse zunächst mit dem Serializable-Attribut versehen.

So markieren Sie eine Klasse als serialisierbar

  • Ändern Sie die Klassendeklaration für die Loan-Klasse wie folgt:

    <Serializable()> Public Class Loan
    

Durch das Serializable-Attribut wird dem Compiler mitgeteilt, dass der gesamte Inhalt der Klasse in einer Datei beibehalten werden kann. In diesem Fall möchten Sie nur den InterestRate-Member beibehalten, wahrscheinlich jedoch nicht die Member Customer, LoanAmount oder Period. Mit dem NonSerialized-Attribut können die Klassenmember markiert werden, die nicht beibehalten werden sollen. Der Einfachheit halber bleibt in diesem Beispiel alles außer dem Customer-Member erhalten.

So verhindern Sie die Serialisierung eines Members

  • Ändern Sie die Deklaration für den Customer-Member wie folgt:

    <NonSerialized()> Public Customer As String
    

Danach fügen Sie der LoanApp-Anwendung den Serialisierungscode hinzu. Um die Klasse zu serialisieren und in eine Datei zu schreiben, verwenden Sie den System.IO-Namespace und den System.Xml.Serialization-Namespace. Damit Sie nicht die vollqualifizierten Namen eingeben müssen, verwenden Sie die Imports-Anweisung.

So fügen Sie den Namespaces Verweise hinzu

  • Fügen Sie am Anfang der Form1-Klasse die folgenden Imports-Anweisungen ein:

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

    In diesem Fall speichern Sie das Objekt mit einem binären Formatierungsprogramm im Binärformat. Im weiteren Verlauf dieser exemplarischen Vorgehensweise ändern Sie den Code so, dass das Objekt in einem SOAP-Format gespeichert wird.

Im nächsten Schritt fügen Sie beim Erstellen des Objekts aus der Datei Code zum Aufheben der Serialisierung ein.

So deserialisieren Sie ein Objekt

  1. Fügen Sie der Klasse eine Konstante für den Dateinamen der serialisierten Daten hinzu.

    Const FileName As String = "SavedLoan.bin"
    
  2. Ändern Sie den Code in der Form1_Load-Ereignisprozedur wie folgt:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) 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
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

    Sie müssen zunächst prüfen, ob die Datei vorhanden ist. Falls ja, erstellen Sie eine Stream-Klasse zum Lesen der Binärdatei und eine BinaryFormatter-Klasse zum Übersetzen der Datei. Mit der CType-Methode wird die Umwandlung vom Stream- in den Loan-Objekttyp vorgenommen.

Danach müssen Sie Code zum Speichern der in die Textfelder der Loan-Klasse eingegebenen Daten hinzufügen und anschließend die Klasse in einer Datei serialisieren.

So speichern Sie die Daten und serialisieren die Klasse

  • Fügen Sie der Form1_Closing-Ereignisprozedur den folgenden Code hinzu:

    Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As _
    System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TestLoan.LoanAmount = CType(TextBox1.Text, Double)
        TestLoan.InterestRate = CType(TextBox2.Text, Double)
        TestLoan.Term = CType(TextBox3.Text, Integer)
        TestLoan.Customer = TextBox4.Text
    
        Dim TestFileStream As Stream = File.Create(FileName)
        Dim serializer As New BinaryFormatter
        serializer.Serialize(TestFileStream, TestLoan)
        TestFileStream.Close()
    End Sub
    

An dieser Stelle können Sie die Anwendung wieder erstellen und ausführen. Anfänglich werden in den Textfeldern die Standardwerte angezeigt. Ändern Sie versuchsweise die Werte, und geben Sie im vierten Textfeld einen Namen ein. Schließen Sie die Anwendung, und führen Sie sie erneut aus. Jetzt werden in den Textfeldern die neuen Werte angezeigt. Eine Ausnahme bildet der Kundenname, weil er als NonSerialized markiert worden war.

Beibehalten des Objekts unter Verwendung eines SOAP-Formats

Im vorliegenden Beispiel wurde bislang demonstriert, wie ein Objekt mithilfe eines Binärformats in einer Textdatei beibehalten wird. Für die meisten Windows-Anwendungen eignet sich ein Binärformat sehr gut. Mit einem SOAP-Format kann das Objekt für Webanwendungen oder XML-Webdienste auch in einer XML-Datei beibehalten werden. Das erleichtert den gemeinsamen Zugriff auf das Objekt.

Zur Beibehaltung des Objekts in einem SOAP-Format müssen Sie zunächst auf die SoapFormatter-Klasse verweisen. Die SoapFormatter-Klasse befindet sich in einem eigenen Namespace (System.Runtime.Serialization.Formatters.Soap).

So behalten Sie das Objekt im SOAP-Format bei

  1. Wählen Sie im Projektmappen-Explorer das LoanApp-Projekt aus.

  2. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

  3. Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte .NET, und wählen Sie die System.Runtime.Serialization.Formatters.Soap-Komponente aus.

  4. Klicken Sie auf OK, um das Dialogfeld zu schließen.

  5. Fügen Sie im Code-Editor am Anfang des Form1-Moduls folgende Imports-Anweisung ein:

    Imports System.Runtime.Serialization.Formatters.Soap
    
  6. Ändern Sie den Dateinamen von SavedLoan.bin in SavedLoan.xml.

  7. Ändern Sie in der Form1_Load-Ereignisprozedur die Dim-Anweisung von Dim deserializer As New BinaryFormatter in:

    Dim deserializer As New SoapFormatter
    
  8. Ändern Sie in der Form1_Closing-Ereignisprozedur die Dim-Anweisung von Dim serializer As New BinaryFormatter in:

    Dim serializer As New SoapFormatter
    

An diesem Punkt können Sie die Anwendung erstellen und testen. Bei der ersten Ausführung der Anwendung wird die Datei SavedLoan.xml erzeugt. Wählen Sie zum Anzeigen der Datei im Projektmappen-Explorer die Option Alle Dateien anzeigen aus. Die Datei befindet sich im Bin-Knoten des Windows-Anwendungsprojekts.

Hinweis:

Wenn Sie sich bereits im Modus Alle Dateien anzeigen befinden, müssen Sie die Ansicht aktualisieren, indem Sie im Menü Ansicht auf Aktualisieren klicken, um die Datei anzuzeigen.

Die drei Member der LoanClass werden im XML-Format angezeigt. Ändern Sie den InterestRate-Wert in der XML-Datei, speichern Sie die Datei, und führen Sie die Anwendung erneut aus. Im zweiten Textfeld wird jetzt der neue Zinssatz angezeigt.

Siehe auch

Konzepte

PropertyBag-Entsprechungen für Visual Basic 6.0-Benutzer

Grundlagen der Serialisierung in .NET Framework