Если что-то наследуется от класса Serializable, является ли дочерний класс еще Serializable?
Сериализуемое наследование
Ответ 1
Это зависит от того, что вы подразумеваете под сериализацией. Если вы имеете в виду маркер CLI (т.е. Атрибут [Serializable]
), то это не наследуется (доказательство ниже). Вы должны явно отмечать каждый производный класс как [Serializable]
. Если, однако, вы имеете в виду интерфейс ISerializable
, то да: реализация интерфейса наследуется, но вам нужно быть осторожным - например, с помощью метода virtual
, чтобы производные классы могли вносить свои данные в сериализацию.
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 {}