Le livre CLR Via C#
présente un moyen simple de cloner des objets via la sérialisation binaire.Que fait réellement StreamingContextStates.Clone?
Il précise StreamingContextStates.Clone
lors de la création du BinaryFormatter
comme ceci:
var formatter = new BinaryFormatter
{
Context = new StreamingContext(StreamingContextStates.Clone)
};
The documentation for StreamingContextStates.Clone
dit qu'il
Indique que le graphe d'objet est cloné. Les utilisateurs peuvent supposer que le graphique cloné continuera à exister dans le même processus et qu'il est sûr d'accéder aux descripteurs ou à d'autres références à des ressources non gérées.
Bien assez bien - mais je ne sais pas vraiment ce que cela signifie réellement. En quoi cela change-t-il réellement le comportement du BinaryFormatter
? Quelqu'un peut-il énumérer les effets concrets que l'utilisation de ce drapeau a?
Pour mémoire, je ** fortement ** vous suggère d'éviter 'BinaryFormatter', eh bien, la plupart des cas. Il y a des choses à portée de main, mais j'ai vu * tant * de personnes * souffrir * tant de choses ... en effet, les problèmes de 'BinaryFormatter 'faisaient partie des raisons pour lesquelles je me suis beaucoup impliqué dans la sérialisation quelques années en arrière –
Cette propriété est réexposée dans 'ISerializable.GetObjectData (...)', donc techniquement toute implémentation ** pourrait en théorie ** choisir de faire quelque chose de différent en fonction de la valeur 'StreamingContextStates'. Je ne sais pas combien, le cas échéant *, mais –
@MarcGravell Intéressant, merci. (Et peut-être que cet échantillon devrait être retiré de CLR Via C# pour la prochaine édition alors.) –