43 votes

Héritage sérialisable

Si quelque chose hérite d'une classe sérialisable, la classe enfant est-elle toujours sérialisable ?

80voto

Marc Gravell Points 482669

Cela dépend de ce que vous entendez par sérialisable. Si vous voulez dire le marqueur CLI (c'est-à-dire l'attribut [Serializable]), alors c'est pas hérité (preuve ci-dessous). Vous devez explicitement marquer chaque classe dérivée comme [Serializable]. Si, toutefois, vous voulez parler de l'interface ISerializable, alors oui : les implémentations de l'interface sont héritées, mais vous devez être prudent - par exemple en utilisant une méthode virtuelle afin que les classes dérivées puissent contribuer à la sérialisation avec leurs données.

using System;
class Program
{
    static void Main()
    {
        Console.WriteLine(typeof(Foo).IsSerializable); // shows True
        Console.WriteLine(typeof(Bar).IsSerializable); // shows False
    }
}
[Serializable]
class Foo {}
class Bar : Foo {}

7voto

Will Points 76760

Faites attention si vous implémentez ISerializable ! Vous devez surcharger ses méthodes et, une fois que vous avez fini de sérialiser vos propriétés, vous devez appeler les implémentations de la classe de base !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X