10
votes

Les méthodes sont également sérialisées avec les membres de données dans .NET?

Le titre est évident, j'ai besoin de savoir si des méthodes sont sérialisées avec des instances d'objet dans C #, je sais qu'ils ne le font pas en Java, mais je suis un peu nouveau à C #. S'ils ne le font pas, dois-je mettre la classe d'origine avec le flux d'octets (objet sérialisé) dans un package lorsque vous l'envoyez à un autre PC? La classe d'origine peut-elle être comme un fichier DLL?


3 commentaires

Pour info, il y a lots des API de sérialisation. Ils se comportent différemment - c'est sons comme vous utilisez Binaryformatter , mais en général, vous devriez essayer d'être explicite sur lequel API que vous utilisez.


N'a pas reçu votre commentaire?


BTW, la sérialisation n'a presque rien à voir avec C # et tout à voir avec .NET.


4 Réponses :


16
votes

Non. Les informations de type sont sérialisées, ainsi que l'état. Afin de déseraliser les données, votre programme devra avoir accès aux assemblages contenant les types (y compris les méthodes).


2 commentaires

Vous dites des assemblages afin que les méthodes de la classe d'origine en tant que fichier DLL fonctionneront très bien, non?


@Shaza: Oui. Les deux côtés (sérialisation et désérialisation) doivent avoir l'assemblage (typiquement dll) contenant le type étant sérialisé. Cela doit être découvertable pour que le type soit instancié correctement par les classes de sérialisation.



2
votes

Les méthodes ne sont pas sérialisées.

Je ne connais pas votre scénario, mais mettez dans une bibliothèque (assemblage / DLL) et en utilisant cela à l'autre extrémité pour désérialiser vous obtient tous.

ps. Vous devriez probablement créer des questions supplémentaires avec les facteurs impliqués dans votre scénario. Si vous souhaitez envoyer et exécuter de manière dynamique le code, vous pouvez créer des conséquences de sécurité affreuses.


0 commentaires

1
votes

J'ai été confus quand .NET est arrivé en première série de sérialisation. Je pense que cela venait du fait que la plupart des livres et des guides mentionnent qu'il vous permet de sérialiser vos «objets» comme XML et de les déplacer, le fait est que vous hydratez réellement les valeurs de votre objet afin que vous puissiez les déshydrater ce dernier. À tout moment, vous enregistrez votre objet entier sur le disque car cela nécessiterait la DLL et ne figure pas dans le fichier XML.


0 commentaires

12
votes

Il peut être plus facile de comprendre si vous avez appris C. une classe comme xxx

est essentiellement syntaxique sucre pour xxx

Il s'agit essentiellement de la manière dont les méthodes non virtuelles sont implémentées dans des langues orientées objet. La chose importante ici est que les méthodes sont non partie des données d'instance.


1 commentaires

Mais que se passe-t-il lorsque la classe C dans l'exemple ci-dessus a des méthodes virtuelles? Est-ce que la tablette va-t-elle être sérialisée aussi? Si tel est le cas, alors lorsque vous restaurez (désérialisez) l'objet à partir d'un fichier à une nouvelle instance de l'application, l'adresse de la machine à table n'est pas garantie de pointer vers la fonction de droite? Savez-vous comment .NET gère cela?