




Это зависит от того, что вы имеете в виду под сериализацией. Если вы имеете в виду маркер 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 {}
Атрибуты по своей природе не наследуются. Кроме того, нельзя считать, что класс унаследован от атрибута. Следовательно, атрибуты не имеют ничего общего с вопросом ОП.
Извините, но вы ошибаетесь. Атрибуты делать относятся к вопросу; атрибут [Serializable] - один из тех, которые компилятор обрабатывает по-разному: он использует его для установки флага «сериализуемость» в классе CLI (если вы проверите IL, он фактически отбрасывает атрибут на этом этапе).
Точно так же я никогда ничего не говорил о классе, наследующем от атрибута - хотя на самом деле, поскольку атрибуты являются, классы и атрибуты могут наследовать друг от друга, класс атрибута в значительной степени наследуется от атрибута ...
Хороший момент о производных классах. Я оказался здесь в поисках точного объяснения.
Также этот вопрос неоднозначный