Procédure pas à pas : persistance d'un objet (C# et Visual Basic)
Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Procédure pas à pas : persistance d'un objet (C# et Visual Basic)

Bien qu'il soit possible de définir des valeur par défaut pour les propriétés d'un objet au moment du design, les valeurs entrées lors de l'exécution sont perdues en cas de destruction de l'objet. Vous pouvez utiliser la sérialisation pour rendre les données d'un objet persistantes entre les instances, ce qui vous permet de stocker des valeurs et de les récupérer lors de la prochaine instanciation de l'objet.

Remarque Remarque

En Visual Basic, vous pouvez utiliser l'objet My.Settings pour stocker données simples, telles qu'un nom ou un nombre. Pour plus d’informations, consultez My.Settings, objet.

Dans cette procédure pas à pas, vous allez créer un objet Loan simple et rendre ses données persistantes dans un fichier. Vous récupérerez ensuite les données du fichier lors de la recréation de l'objet. Enfin, vous allez modifier le code afin de rendre l'objet persistant dans un format SOAP.

Note de sécurité Note de sécurité

Cet exemple crée un fichier s'il n'existe pas. Si une application doit créer un fichier, elle doit disposer de l'autorisation Create pour accéder au dossier. Les autorisations sont définies à l'aide de listes de contrôle d'accès. Si le fichier existe déjà, l'application a uniquement besoin de l'autorisation Write, ce qui représente une autorisation inférieure. Lorsque cela est possible, il est plus sûr de créer le fichier au cours du déploiement et de n'accorder l'autorisation Read que sur un seul fichier (plutôt que l'autorisation Créer sur un dossier). En outre, il est plus sûr d'écrire les données dans des dossiers utilisateur que dans le dossier racine ou le dossier Program Files.

Note de sécurité Note de sécurité

Cet exemple stocke les données dans un fichier au format binaire ou SOAP. Ces formats ne doivent pas être utilisés pour données sensibles, telles que les mots de passe ou les informations relatives à la carte de crédit.

Remarque Remarque

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Pour modifier vos paramètres, cliquez sur Importation et exportation de paramètres dans le menu Outils. Pour plus d’informations, consultez Paramètres Visual Studio.

La première étape consiste à créer une classe Loan et une application de test qui utilise cette classe.

Pour créer la classe Loan

  1. Créez un projet Bibliothèque de classes et nommez-le "LoanClass". Pour plus d’informations, consultez Création de projets et de solutions.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier Class1, puis cliquez sur Renommer. Renommez le fichier en Loan et appuyez sur ENTRÉE. Lorsque vous renommez le fichier, la classe sera également renommée en Loan.

  3. Ajoutez les membres publics suivants à la classe :

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

Vous devrez également créer une application simple qui utilise la classe Loan.

Pour créer une application de test

  1. Pour ajouter un projet d'application Windows Forms à votre solution, dans le menu Fichier, pointez sur Ajouter, puis cliquez sur Nouveau projet.

  2. Dans la boîte de dialogue Ajouter un nouveau projet, entrez LoanApp comme nom du projet et cliquez sur OK pour fermer la boîte de dialogue.

  3. Dans l'Explorateur de solutions, sélectionnez le projet LoanApp.

  4. Dans le menu Projet, cliquez sur Définir comme projet de démarrage.

  5. Dans le menu Projet, cliquez sur Ajouter une référence.

  6. Dans la boîte de dialogue Ajouter une référence, cliquez sur l'onglet Projets, puis sur le projet LoanClass.

  7. Cliquez sur OK pour fermer la boîte de dialogue.

  8. Dans le concepteur, ajoutez quatre contrôles TextBox au formulaire.

  9. Dans l'éditeur de code, ajoutez le code suivant :

    
    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. Ajoutez un gestionnaire d'événements pour l'événement PropertyChanged au formulaire en utilisant le code suivant :

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

À ce stade, vous pouvez générer et exécuter l'application. Remarquez que les valeurs par défaut de la classe Loan apparaissent dans les zones de texte. Essayez de remplacer le taux d'intérêt de 7,5 par 7,1, puis fermez l'application et exécutez-la de nouveau : le taux reprend sa valeur par défaut de 7,5.

Dans la réalité, les taux d'intérêt changent régulièrement, mais pas nécessairement chaque fois que l'application est exécutée. Plutôt que d'imposer à l'utilisateur de mettre à jour le taux d'intérêt chaque fois qu'il exécute l'application, il peut être plus judicieux de conserver le taux d'intérêt le plus récent entre les instances de l'application. C'est ce que vous ferez à l'étape suivante, en ajoutant la sérialisation à la classe Loan.

Pour rendre les valeurs de la classe Loan persistantes, vous devez d'abord marquer la classe avec l'attribut Serializable.

Pour marquer une classe comme étant sérialisable

  • Modifiez la déclaration de la classe Loan de la façon suivante :

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

L'attribut Serializable indique au compilateur que tout ce que contient la classe peut être persistant dans un fichier. Étant donné que l'événement PropertyChanged est géré par un objet Windows Form, il ne peut pas être sérialisé. L'attribut NonSerialized peut être utilisé pour marquer les membres de la classe qui ne doivent pas être persistants.

Pour empêcher la sérialisation d'un membre

  • Modifiez la déclaration de l'événement PropertyChanged comme suit :

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

L'étape suivante consiste à ajouter le code de sérialisation à l'application LoanApp. Afin de sérialiser la classe et de l'écrire dans un fichier, utilisez les noms d'espaces System.IO et System.Xml.Serialization. Pour éviter de taper les noms qualifiés complets, vous pouvez ajouter des références aux bibliothèques de classes requises.

Pour ajouter des références aux espaces de noms

  • Ajoutez les instructions suivantes au début de la classe Form1 :

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

    Dans ce cas, vous utilisez un formateur binaire pour enregistrer l'objet dans un format binaire. Plus loin dans cette procédure, vous allez modifier le code afin d'enregistrer l'objet dans un format SOAP.

L'étape suivante consiste à ajouter le code permettant de désérialiser l'objet à partir du fichier lors de la création de l'objet.

Pour désérialiser un objet

  1. Ajoutez une constante à la classe pour le nom de fichier des données sérialisées.

    
    const string FileName = @"..\..\SavedLoan.bin";
    
    
    
  2. Modifiez le code de la procédure événementielle Form1_Load de la façon suivante :

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

    Remarquez que vous devez d'abord vérifier que le fichier existe. S'il existe, créez une classe Stream pour lire le fichier binaire et une classe BinaryFormatter pour convertir le fichier. Vous devez également convertir le type de flux en type d'objet Loan.

Vous devez ensuite ajouter le code permettant d'enregistrer dans la classe Loan les données saisies dans les zones de texte, puis ensuite de sérialiser la classe dans un fichier.

Pour enregistrer les données et sérialiser la classe

  • Ajoutez le code suivant à la procédure événementielle Form1_FormClosing :

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

À ce stade, vous pouvez de nouveau générer et exécuter l'application. À l'origine, les valeurs par défaut s'affichent dans les zones de texte. Essayez de modifier les valeurs et de taper un nom dans la quatrième zone de texte. Fermez l'application et exécutez-la de nouveau. Notez que les nouvelles valeurs s'affichent maintenant dans les zones de texte.

Jusqu'à présent, l'exemple a illustré la persistance d'un objet dans un fichier texte à l'aide d'un format binaire. Un tel format est parfait pour la plupart des applications Windows. Pour les applications ou les services Web, vous pouvez rendre l'objet persistant dans un fichier XML à l'aide d'un format SOAP, ce qui facilite le partage de l'objet.

Pour rendre l'objet persistant dans un format SOAP, vous devez d'abord référencer la classe SoapFormatter. La classe SoapFormatter se trouve dans son propre espace de noms : System.Runtime.Serialization.Formatters.Soap.

Pour rendre persistant l'objet à l'aide d'un format SOAP

  1. Dans l'Explorateur de solutions, sélectionnez le projet LoanApp.

  2. Dans le menu Projet, cliquez sur Ajouter une référence.

  3. Dans la boîte de dialogue Ajouter une référence, cliquez sur l'onglet .NET, puis sur le composant System.Runtime.Serialization.Formatters.Soap.

  4. Cliquez sur OK pour fermer la boîte de dialogue.

  5. Dans l'éditeur de code, ajoutez l'instruction suivante au début du module Form1 :

    
    using System.Runtime.Serialization.Formatters.Soap;
    
    
    
  6. Remplacez le nom de fichier SavedLoan.bin par SavedLoan.xml.

  7. Dans la procédure événementielle Form1_Load, remplacez la déclaration de la variable deserializer par l'élément suivant :

    
    SoapFormatter deserializer = new SoapFormatter();
    
    
    
  8. Dans la procédure événementielle Form1_FormClosing, remplacez la déclaration de la variable serializer par l'élément suivant :

    
    SoapFormatter serializer = new SoapFormatter();
    
    
    

À ce stade, vous pouvez générer et tester l'application. Lors de la première exécution de l'application, le fichier SavedLoan.xml est créé. Pour afficher ce fichier, sélectionnez l'option Afficher tous les fichiers dans l'Explorateur de solutions ; il se trouve sous le nœud Bin du projet d'application Windows.

Remarque Remarque

Si le mode Afficher tous les fichiers est déjà activé, vous devez actualiser la vue en cliquant sur Actualiser dans le menu Affichage pour voir le fichier.

Remarquez que les trois membres de LoanClass s'affichent au format XML. Essayez de modifier la valeur InterestRate dans le fichier XML, enregistrez-le puis exécutez de nouveau l'application. Le nouveau taux d'intérêt s'affiche dans la deuxième zone de texte.

Ajouts de la communauté

AJOUTER
Afficher:
© 2016 Microsoft