Подтвердить что ты не робот

Сериализуемое наследование

Если что-то наследуется от класса Serializable, является ли дочерний класс еще Serializable?

4b9b3361

Ответ 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 {}