Pourquoi sont des interfaces qui ne sont pas [Serializable]?
Je pense que l'ajout de l'attribut à une interface serait utile assurez-vous de ne pas créer des classes qui utilisent l'interface et oubliez pas de faire sérialisables.
Cela pourrait être une question fondamentale, mais je voulais vous demander les experts.
- Yous devez vérifier cette réponse, si vous voulez la façon dont stackoverflow.com/questions/1333864/...
Vous devez vous connecter pour publier un commentaire.
Interfaces de définir un contrat et n'ont pas leur propre état.
La sérialisation est à propos de la sauvegarde et du chargement état dans et hors d'un modèle d'objet.
Pas beaucoup de point à la sérialisation de quelque chose qui est titulaire d'aucun état.
Pour répondre à la question pratique de forcer la mise en œuvre d'une interface à
Serializable
- c'est pourquoi leISerializable
interface existe.Dans .NET, vous pouvez déclarer une interface qui doit mettre en œuvre d'autres interfaces:
Voir plus d'informations ici.
list
. Le type de la variable estIList<myType>
. LeXmlSerializer
a des problèmes avec les types d'interface, qui est pourquoi il n'est pas, voir stackoverflow.com/questions/8845615/...Si vous voulez forcer les classes qui implémentent votre interface personnalisée
IMyInterface
être sérialisable vous pouvez le définir a:Plus clairement indique que la mise en œuvre de la classe devrait soutenir la sérialisation. Cela ne supprime pas la nécessité de marquer la classe avec le
[Serializable]
attribut.IIRC, vous pouvez également créer un FxCop personnalisé règle qui vérifie que les classes qui héritent de
IMyInterface
sont marqués avec le[Serializable]
attribut et de cette façon, la suppression de la nécessité pour les classes de mettre en œuvre la sérialisation personnalisée.Il ya quelques bonnes quoique ésotérique raisons pour lesquelles une interface qui est et n'est pas ce qui continue d'être possible. Cela dit cependant: je suis d'accord avec vous. Il y a beaucoup de choses qu'il serait utile que si l'on pouvait les intégrer dans les interfaces.
[Serializable]
et de statistiques viennent à l'esprit.Bien qu'ils ne rentrent pas dans la philosophie de ce qu'une interface est, ils semblent intégrer cette vacants zone grise dans l'unique héritage de la programmation orientée objet. Il ya bien sûr des solutions, mais ils se sentent très contraint par rapport à l'intention initiale.
Bien, il ya une raison que les nouvelles classes ne sont pas marqués comme sérialisable par défaut: Par l'ajout de la
Serializable
attribut, vous reconnaissez que vous avez veillé à ce que la sérialisation dans votre classe œuvres, par le choix des types de données pour votre champs d'instance et par l'ajout de la sérialisation de la logique, si nécessaire.Donc, si vous avez "oublié" pour ajouter le
Serializable
attribut à votre classe, vous avez probablement oublié aussi pour vérifier si la sérialisation fonctionne vraiment sur votre classe. Accordé, dans de nombreux cas, il va fonctionner "out of the box", et l'ajout d'attribut est tout ce qui reste, mais vous êtes censé double-vérifier et reconnaître de manière explicite que fait (en ajoutant manuellement l'attribut).