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
Erstellen Sie ein neues Class Library-Projekt, und nennen Sie es "LoanClass". Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Projektmappen und Projekten.
Ändern Sie im Code-Editor den Namen der Klasse von "Class1" in "Loan".
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
Um der Projektmappe ein Windows-Anwendungsprojekt hinzufügen, zeigen Sie im Menü Datei auf Hinzufügen und klicken anschließend auf Neues Projekt.
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.
Wählen Sie im Projektmappen-Explorer das LoanApp-Projekt aus.
Klicken Sie im Menü Projekt auf Als Startprojekt festlegen.
Klicken Sie im Menü Projekt auf Verweis hinzufügen.
Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte Projekte, und wählen Sie das Projekt LoanClass aus.
Klicken Sie auf OK, um das Dialogfeld zu schließen.
Fügen Sie im Designer vier TextBox-Steuerelemente in das Formular ein.
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
Fügen Sie der Klasse eine Konstante für den Dateinamen der serialisierten Daten hinzu.
Const FileName As String = "SavedLoan.bin"
Ä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
Wählen Sie im Projektmappen-Explorer das LoanApp-Projekt aus.
Klicken Sie im Menü Projekt auf Verweis hinzufügen.
Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte .NET, und wählen Sie die System.Runtime.Serialization.Formatters.Soap-Komponente aus.
Klicken Sie auf OK, um das Dialogfeld zu schließen.
Fügen Sie im Code-Editor am Anfang des Form1-Moduls folgende Imports-Anweisung ein:
Imports System.Runtime.Serialization.Formatters.Soap
Ändern Sie den Dateinamen von SavedLoan.bin in SavedLoan.xml.
Ändern Sie in der Form1_Load-Ereignisprozedur die Dim-Anweisung von Dim deserializer As New BinaryFormatter in:
Dim deserializer As New SoapFormatter
Ä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.