2010-08-10 1 views
4

После борьбы с кучей неискушенных исключений при попытке сериализации моих классов и подклассов я наконец понял, в чем была моя проблема: [Serializable] не наследуется подклассами, когда применяется к базовый класс. Я по-прежнему неясен в отношении атрибутов C# в целом, но я понимаю, что при создании настраиваемого атрибута программист может включить автоматическое наследование атрибута.Переопределение наследования по внутренним атрибутам в C#

Есть ли способ переопределить наследование [Serializable]? Есть ли веская причина, почему это не было сделано с самого начала и/или было бы плохой идеей сделать это в первую очередь? Я хотел бы, чтобы все подклассы указанного базового класса были сериализуемыми, поэтому просто кажется, что не нужно добавлять атрибут в любые новые подклассы, которые я делаю.

Спасибо!

ответ

5

Существует абсолютно хорошая причина, по которой это не было сделано в первую очередь - просто потому, что базовый класс сериализуем, не означает, что производный класс, естественно, есть.

Heck, object сериализуем - если сериализуемости были унаследованы, это будет означать, каждый класс в .NET будет сериализации :)

Вы не можете «переопределить», что либо - вы должны указать его в каждом классе , Я думаю, что это хорошо, на самом деле - когда вы добавляете атрибут, вы должны выполнить ментальную проверку на классе и проверить, действительно ли это имеет смысл сериализовать его.

+6

Вы когда-нибудь устали от того, что всегда правы? –

+0

Замечательная записка об этом. Классы, которые реализуют 'ISerializable' **, также должны быть отмечены символом' SerializableAttribute'. Предположительно, это позволяет среде выполнения определять, можно ли ее десериализовать тип, упомянутый в метаданных сериализации (так как в этой точке нет экземпляра типа). – LBushkin

+2

@ Джимми Хоффа, я думаю, что Джон периодически высказывает неправильный ответ, чтобы разбить монотонность того, что он прав. Однако при дальнейших проверках выясняется, что неправильные ответы также правильны. –