Exemplarische Vorgehensweise: Beibehalten eines Objekts in Visual Studio (C#)Walkthrough: Persisting an Object in Visual Studio (C#)

Obwohl Sie die Eigenschaften eines Objekts während der Entwurfszeit auf Standardwerte festlegen können, gehen während der Laufzeit eingegebene Werte verloren, wenn das Objekt zerstört wird.Although you can set an object's properties to default values at design time, any values entered at run time are lost when the object is destroyed. Sie können die Serialisierung verwenden, um die Daten eines Objekts zwischen Instanzen beizubehalten. Dadurch können Sie Werte speichern und abrufen, wenn das Objekt das nächste Mal instanziiert wird.You can use serialization to persist an object's data between instances, which enables you to store values and retrieve them the next time that the object is instantiated.

In dieser exemplarischen Vorgehensweise erstellen Sie ein einfaches Loan-Objekt und behalten dessen Daten in einer Datei bei.In this walkthrough, you will create a simple Loan object and persist its data to a file. Anschließend rufen Sie die Daten aus der Datei ab, wenn Sie das Objekt neu erstellen.You will then retrieve the data from the file when you re-create the object.

Wichtig

Mit diesem Beispiel wird eine neue Datei erstellt, wenn diese noch nicht vorhanden ist.This example creates a new file if the file does not already exist. Wenn eine Anwendung eine Datei erstellen muss, muss Sie über die Create-Berechtigung für den Ordner verfügen.If an application must create a file, that application must Create permission for the folder. Berechtigungen werden mithilfe von Zugriffssteuerungslisten festgelegt.Permissions are set by using access control lists. Wenn die Datei bereits vorhanden ist, benötigt die Anwendung lediglich die Berechtigung Write, was einer geringeren Berechtigung entspricht.If the file already exists, the application needs only Write permission, a lesser permission. Aus Sicherheitsgründen sollte die Datei nach Möglichkeit erst im Verlauf der Bereitstellung erstellt werden. Außerdem sollte die Read-Berechtigung nur für eine einzelne Datei erteilt werden (anstatt „Create“-Berechtigungen für den gesamten Ordner zu gewähren).Where possible, it is more secure to create the file during deployment, and only grant Read permissions to a single file (instead of Create permissions for a folder). Darüber hinaus ist es sicherer, Daten in Benutzerordner statt in Stammordner oder den Ordner „Programme“ zu schreiben.Also, it is more secure to write data to user folders than to the root folder or the Program Files folder.

Wichtig

In diesem Beispiel werden Daten in einer Datei im Binärformat gespeichert.This example stores data in a binary format file. Diese Formate sollten nicht für sensible Daten wie Kennwörter oder Kreditkarteninformationen verwendet werden.These formats should not be used for sensitive data, such as passwords or credit-card information.

Hinweis

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen.The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren , um die Einstellungen zu ändern.To change your settings, click Import and Export Settings on the Tools menu. Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.For more information, see Customizing Development Settings in Visual Studio.

Erstellen des Loan-ObjektsCreating the Loan Object

Der erste Schritt ist das Erstellen einer Loan-Klasse und einer Testanwendung, die die Klasse verwendet.The first step is to create a Loan class and a test application that uses the class.

So erstellen Sie eine Loan-KlasseTo create the Loan class

  1. Erstellen Sie ein neues Klassenbibliotheksprojekt mit dem Namen „LoanClass“.Create a new Class Library project and name it "LoanClass". Weitere Informationen finden Sie unter Erstellen von Projekten und Projektmappen.For more information, see Creating Solutions and Projects.

  2. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für die Datei „Class1“ und wählen Sie Umbenennen aus.In Solution Explorer, open the shortcut menu for the Class1 file and choose Rename. Benennen Sie die Datei in Loan um, und drücken Sie die EINGABETASTE.Rename the file to Loan and press ENTER. Durch Umbenennen der Datei wird die Klasse ebenfalls in Loan umbenannt.Renaming the file will also rename the class to Loan.

  3. Fügen Sie der Klasse die folgenden öffentlichen Member hinzu:Add the following public members to the 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;  
        }  
    }  
    

Sie müssen ebenfalls eine einfache Anwendung erstellen, die die Loan-Klasse verwendet.You will also have to create a simple application that uses the Loan class.

So erstellen Sie eine TestanwendungTo create a test application

  1. Wählen Sie im Menü Datei Hinzufügen und Neues Projekt aus, um ein Windows Forms-Anwendungsprojekt zu Ihrer Projektmappe hinzuzufügen.To add a Windows Forms Application project to your solution, on the File menu, choose Add, New Project.

  2. Wählen Sie im Dialogfeld Neues Projekt hinzufügen Windows Forms-Anwendung aus, und geben Sie als Namen für das Projekt LoanApp ein. Klicken Sie anschließend auf OK, um das Dialogfeld zu schließen.In the Add New Project dialog box, choose Windows Forms Application, and enter LoanApp as the name of the project, and then click OK to close the dialog box.

  3. Wählen Sie im Projektmappen-Explorer das LoanApp-Projekt aus.In Solution Explorer, choose the LoanApp project.

  4. Klicken Sie im Menü Projekt auf Als Startprojekt festlegen.On the Project menu, choose Set as StartUp Project.

  5. Wählen Sie im Menü Projekt den Eintrag Verweis hinzufügenaus.On the Project menu, choose Add Reference.

  6. Wählen Sie im Dialogfeld Verweis hinzufügen die Registerkarte Projekte und anschließend das LoanClass-Projekt aus.In the Add Reference dialog box, choose the Projects tab and then choose the LoanClass project.

  7. Klicken Sie auf OK, um das Dialogfeld zu schließen.Click OK to close the dialog box.

  8. Fügen Sie dem Formular im Designer vier TextBox-Steuerelemente hinzu.In the designer, add four TextBox controls to the form.

  9. Fügen Sie im Code-Editor folgenden Code hinzu:In the Code Editor, add the following code:

    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. Fügen Sie dem Formular mithilfe des folgenden Codes einen Ereignishandler für das Ereignis PropertyChanged hinzu:Add an event handler for the PropertyChanged event to the form by using the following code:

    private void CustomerPropertyChanged(object sender,   
        System.ComponentModel.PropertyChangedEventArgs e)  
    {  
        MessageBox.Show(e.PropertyName + " has been changed.");  
    }  
    

Nun können Sie die Anwendung erstellen und ausführen.At this point, you can build and run the application. Beachten Sie, dass die Standardwerte aus der Loan-Klasse in den Textfeldern angezeigt werden.Note that the default values from the Loan class appear in the text boxes. Versuchen Sie, den Wert „Zinssatz“ von 7,5 zu 7,1 zu ändern, schließen Sie die Anwendung, und führen Sie sie erneut aus – der Wert wird auf den Standardwert 7,5 zurückgesetzt.Try to change the interest-rate value from 7.5 to 7.1, and then close the application and run it again—the value reverts to the default of 7.5.

In der Praxis ändern sich Zinssätze regelmäßig, aber nicht unbedingt jedes Mal wenn die Anwendung ausgeführt wird.In the real world, interest rates change periodically, but not necessarily every time that the application is run. Es ist besser, den aktuellsten Zinssatz zwischen zwei Instanzen der Anwendung beizubehalten, anstatt den Benutzer den Zinssatz bei jeder Ausführung der Anwendung aktualisieren zu lassen.Rather than making the user update the interest rate every time that the application runs, it is better to preserve the most recent interest rate between instances of the application. Im nächsten Schritt werden Sie durch Hinzufügen von Serialisierung zur Loan-Klasse genau das tun.In the next step, you will do just that by adding serialization to the Loan class.

Verwenden von Serialisierung zum Beibehalten des ObjektsUsing Serialization to Persist the Object

Sie müssen die Klasse zuerst mit dem Attribut Serializable markieren, um die Werte für die Loan-Klasse beizubehalten.In order to persist the values for the Loan class, you must first mark the class with the Serializable attribute.

So markieren Sie eine Klasse als serialisierbarTo mark a class as serializable

  • Ändern Sie die Klassendeklaration für die Loan-Klasse wie folgt:Change the class declaration for the Loan class as follows:

    [Serializable()]  
    public class Loan : System.ComponentModel.INotifyPropertyChanged  
    {  
    

Der Compiler wird vom Attribut Serializable darüber informiert, dass der Inhalt der Klasse in einer Datei beibehalten werden kann.The Serializable attribute tells the compiler that everything in the class can be persisted to a file. Da das Ereignis PropertyChanged von einem Windows Form-Objekt behandelt wird, kann es nicht serialisiert werden.Because the PropertyChanged event is handled by a Windows Form object, it cannot be serialized. Das Attribut NonSerialized kann dazu verwendet werden, Klassenmember zu markieren, die nicht beibehalten werden sollen.The NonSerialized attribute can be used to mark class members that should not be persisted.

So verhindern Sie, dass ein Member serialisiert wirdTo prevent a member from being serialized

  • Ändern Sie die Deklaration für das Ereignis PropertyChanged wie folgt:Change the declaration for the PropertyChanged event as follows:

    [field: NonSerialized()]  
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;  
    

Fügen Sie als nächstes den Serialisierungscode zur LoanApp-Anwendung hinzu.The next step is to add the serialization code to the LoanApp application. Um die Klasse zu serialisieren und in eine Datei zu schreiben, verwenden Sie die Namespaces System.IO und System.Xml.Serialization.In order to serialize the class and write it to a file, you will use the System.IO and System.Xml.Serialization namespaces. Sie können Verweise zu den notwendigen Klassenbibliotheken hinzufügen, damit Sie die vollqualifizierten Namen nicht eingeben müssen.To avoid typing the fully qualified names, you can add references to the necessary class libraries.

So fügen Sie Verweise zu Namespaces hinzuTo add references to namespaces

  • Fügen Sie am Anfang der Form1-Klasse die folgenden Anweisungen ein:Add the following statements to the top of the Form1 class:

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

    In diesem Fall verwenden Sie ein binäres Formatierungsprogramm, um ein Objekt im Binärformat zu speichern.In this case, you are using a binary formatter to save the object in a binary format.

Fügen Sie als nächstes Code hinzu, um das Objekt aus der Datei zu deserialisieren wenn das Objekt erstellt wird.The next step is to add code to deserialize the object from the file when the object is created.

So deserialisieren Sie ein ObjektTo deserialize an object

  1. Fügen Sie eine Konstante zur Klasse für den Dateinamen der serialisierten Daten hinzu.Add a constant to the class for the serialized data's file name.

    const string FileName = @"..\..\SavedLoan.bin";  
    
  2. Ändern Sie den Code der Form1_Load-Ereignisprozedur wie folgt:Modify the code in the Form1_Load event procedure as follows:

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

    Beachten Sie, dass Sie erst sicherstellen müssen, ob die Datei vorhanden ist.Note that you first must check that the file exists. Wenn sie vorhanden ist, erstellen Sie eine Stream-Klasse zum Lesen der Binärdatei und eine BinaryFormatter-Klasse zum Übersetzen der Datei.If it exists, create a Stream class to read the binary file and a BinaryFormatter class to translate the file. Sie müssen ebenfalls vom Streamtyp in den Loan-Objekttyp konvertieren.You also need to convert from the stream type to the Loan object type.

Als nächstes müssen Sie Code hinzufügen, um die in die Textfelder eingegebenen Daten in der Loan-Klasse zu speichern. Anschließend müssen Sie die Klasse in eine Datei serialisieren.Next you must add code to save the data entered in the text boxes to the Loan class, and then you must serialize the class to a file.

So speichern Sie die Daten und serialisieren die KlasseTo save the data and serialize the class

  • Fügen Sie den folgenden Code zur Form1_FormClosing-Ereignisprozedur hinzu:Add the following code to the Form1_FormClosing event procedure:

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

Nun können Sie die Anwendung erneut erstellen und ausführen.At this point, you can again build and run the application. Zuerst werden die Standardwerte in den Textfeldern angezeigt.Initially, the default values appear in the text boxes. Versuchen Sie, die Werte zu ändern, und geben Sie einen Namen in das vierte Textfeld ein.Try to change the values and enter a name in the fourth text box. Schließen Sie die Anwendung, und führen Sie sie dann erneut aus.Close the application and then run it again. Beachten Sie, dass die neuen Werte jetzt in den Textfeldern erscheinen.Note that the new values now appear in the text boxes.

Siehe auchSee Also

Serialisierung (C#)Serialization (C# )
C#-ProgrammierhandbuchC# Programming Guide