Partager via


Procédure pas à pas : persistance d'un objet en Visual Basic

Mise à jour : novembre 2007

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 en Visual Basic 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.

Pour stocker des données simples, telles qu'un nom ou un nombre, vous pouvez utiliser l'objet My.Settings. 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é :

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é :

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 :

Selon vos paramètres actifs ou votre édition, les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles qui sont décrites dans l'aide. 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.

Création de l'objet Loan

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 Comment : créer des solutions et des projets.

  2. Dans l'éditeur de code, remplacez le nom de la classe "Class1" par "Loan".

  3. Ajoutez les membres publics suivants à la classe :

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

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 Application Windows à la 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 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
    

À 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.

Utilisation de la sérialisation pour rendre l'objet persistant

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
    

L'attribut Serializable indique au compilateur que tout ce que contient la classe peut être persistant dans un fichier. Dans ce cas, vous souhaitez conserver uniquement le membre InterestRate, et non les membres Customer, LoanAmount ou Period. L'attribut NonSerialized peut être utilisé pour marquer les membres de la classe qui ne doivent pas être persistants. Pour simplifier cet exemple, tout est rendu persistant, sauf le membre Customer.

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

  • Modifiez la déclaration du membre Customer de la façon suivante :

    <NonSerialized()> Public Customer As String
    

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 d'avoir à saisir les noms qualifiés complets, vous pouvez utiliser l'instruction Imports.

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

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

    Imports System.IO
    Imports 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 FileName As String = "SavedLoan.bin"
    
  2. Modifiez le code de la procédure événementielle Form1_Load de la façon suivante :

    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
    

    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. La méthode CType est utilisée pour la conversion du type d'objet Stream en type 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_Closing :

    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
    

À 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. Remarquez que les nouvelles valeurs s'affichent à présent dans les zones de texte, excepté le nom du client, qui a été marqué comme NonSerialized.

Persistance de l'objet à l'aide d'un format SOAP

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. En revanche, pour les applications Web ou les services Web XML, vous souhaiterez peut-être 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 une instruction Imports au début du module Form1 :

    Imports 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, modifiez l'instruction Dim de Dim deserializer As New BinaryFormatter en :

    Dim deserializer As New SoapFormatter
    
  8. Dans la procédure événementielle Form1_Closing, modifiez l'instruction Dim de Dim serializer As New BinaryFormatter en :

    Dim serializer As 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 :

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.

Voir aussi

Concepts

Équivalents PropertyBag pour les utilisateurs de Visual Basic 6.0

Concepts de base de la sérialisation .NET Framework