Si quelque chose hérite d'une classe sérialisable, la classe enfant est-elle toujours sérialisable ?
Réponses
Trop de publicités?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 {}