Question

Java fournit java.io.Serializable et java.lang.Cloneable dans sa bibliothèque standard (et un soutien particulier pour elle dans la langue et la machine virtuelle Java) pour les tâches autour désérialisation / sérialisation / clonage.

A C # choisi un chemin différent pour fournir cette fonctionnalité, comment la mise en œuvre et le code à l'aide de Java il différent et pourquoi at-il été fait de cette façon?

À titre d'exemple, pourquoi C # utilise à la fois un attribut (annotation) et une interface pour la sérialisation?

Était-ce utile?

La solution

.NET n'utilise pas ISerializable comme une simple interface de marqueur. Il agit non seulement comme un marqueur, mais vous permet également de contrôler exactement comment .NET sérialisera la classe en mettant en œuvre GetObjectData et un constructeur qui prend les arguments appropriés.

L'attribut est utilisé lorsque la classe peut être sérialisée, mais vous ne voulez pas définir votre propre comportement de sérialisation.

: Utilisez ISerializable lorsque vous souhaitez définir votre propre comportement de sérialisation; ou utiliser l'attribut [Serializable] lorsque vous voulez laisser à la formatter sérialisation.

ce que je l'appelle évolution? Je ne sais pas. .NET est juste vous offre différents degrés de flexibilité.

Autres conseils

si vous voulez quelque chose sérialisation: cochez cette

Je ne pense pas que C # a évolué. Au contraire, ils ont fixé les deux choses:

  • sérialisation en Java est pas très propre: désérialisation implique l'objet « création » sans faire appel à un constructeur, le processus peut inclure l'exécution d'appeler des méthodes privées, etc. consultez les spécifications si vous êtes curieux.

  • Cloneable est tout simplement cassé. Il ne doit pas être une interface de marqueur, mais préciser la méthode de clone(). Comme il est vous Cloneables vous ne pouvez pas clone().

En fait, il y a beaucoup de choses en Java, principalement de la pré 1,2 jours, qui sont tout à fait cassé / foiré / / impur tout.

Je ne sais pas ce que vous entendez par « évolué », si tout ce que je pense que la tendance est vers des attributs plutôt que des interfaces marqueurs. Je ne sais pas si Java est allé de cette façon ces derniers temps aussi bien.

sérialisation dans le CLR par exemple est mise en évidence dans sa forme de base avec des attributs, mais vous pouvez mettre en œuvre quelques interfaces non-marqueurs qui vous donnent plus de contrôle sur le processus si vous en avez besoin.

interfaces marqueurs sont probablement l'une des pires décisions jamais mises en œuvre en Java. Je veux dire il suffit de regarder comment Cloneable inutile avéré être, parce que personne ne définit une méthode clone public () dans l'interface.

.NET ne va pas dans cette direction (au moins je ne suis pas au courant des interfaces dans cette direction) est moins d'une évolution et plus d'un abandon de la notion. Une autre direction qui semble prendre de plus en plus semble être annotations, que je suppose que vous pouvez voir comme un « marqueur », mais à un niveau plus basique (par exemple, je suis sûr que Java a été mis en œuvre transitoire aujourd'hui serait une annotation et pas un qualificatif)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top