web-dev-qa-db-ja.com

シリアル化可能な継承

何かがSerializableクラスから継承する場合、子クラスはまだSerializableですか?

45
Joe Morgan

シリアル化できるかどうかによって異なります。 CLIマーカー(つまり、[Serializable]属性)を意味する場合、これはnot継承されます(以下の証明)。各派生クラスを[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 {}
80
Marc Gravell