Ceux qui ont déjà programmé des classes pour une appli windows savent peut-être de quoi je veux parler.
Imaginons que j'aie une classe "Compte" et une classe "Opération" pour une appli bancaire.
Ces deux classes sont sérialisables.
Je pose un évènement sur l'objet "Operation" qui se déclenche lorsque le solde de celle-ci change.
J'aimerais récupérer cet évènement à la fois dans ma classe "Compte" et dans mon interface graphique.
Jusque-là, pas de problème, sauf si je tente de sérialiser la classe "Operation".
En effet, le sérialiseur regarde toutes les propriétés de la classe "Operation", découvre l'évènement, puis tente de sérialiser l'objet "Compte" (pas de problème), ainsi que les objets de mon interface graphique qui récupèrent cet évènement. Et là : problème ! Ceux-ci ne sont peut-être pas sérialisables...
Comment faire ?
Pour résoudre ce problème, il vaut mieux définir deux évènements :
- Un qui sera marqué comme internal, et ne sera visible que dans l'assembly de la classe,
- l'autre, public, mais qui sera exclu de la sérialisation.
Dans les objets de notre assembly, nous allons utiliser l'évènement marqué Internal, et pour l'interface graphique, nous n'auront pas d'autre choix que d'utiliser l'autre évènement.
Cette méthode de programmation implique deux choses :
- Déclarer deux évènements distincts et les lancer quand besoin est,
- A la désérialisation, les évènements internes seront restaurés !