C# 可序列化继承

C# 可序列化继承,c#,.net,vb.net,C#,.net,Vb.net,如果某个对象继承自可序列化类,则子类是否仍然可序列化?这取决于您所说的可序列化是什么意思。如果您指的是CLI标记(即[Serializable]属性),则这不是继承的(如下证明)。必须将每个派生类显式标记为[Serializable]。但是,如果您指的是ISerializable接口,那么是的:接口实现是继承的,但是您需要小心-例如,使用virtual方法,以便派生类可以将其数据贡献给序列化 using System; class Program { static void Main(

如果某个对象继承自可序列化类,则子类是否仍然可序列化?

这取决于您所说的可序列化是什么意思。如果您指的是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 {}

属性本质上不是继承的。此外,类不能被视为从属性继承。因此,属性与OP的问题无关。对不起,你错了。属性确实与问题相关;[Serializable]属性是编译器以不同方式处理的属性之一:它使用它在CLI类上设置“Serializable”标志(如果您检查IL,它实际上会在此时丢弃该属性)。同样,我从未说过从属性继承的类-尽管实际上,由于属性是类,属性可以相互继承,一个属性类从一个属性继承而来……关于派生类的好观点。我在这里寻找这个确切的解释。而且,这个问题是含糊不清的