为什么从标准类型继承时会收到警告 CA2229(实现序列化构造函数)

Why do I get warning CA2229 (Implement serialization constructors) when inheriting from standard type

我有这样的 class 定义:

[Serializable]
public class MyDictionary: Dictionary<string, object>
{
}

但是,我收到此代码分析警告:

CA2229 Implement serialization constructors Add a constructor to TcpFieldValueDictionary with the following signature: 'protected TcpFieldValueDictionary(SerializationInfo info, StreamingContext context)'.

不过,泛型字典已经有了构造函数,只是多了一个public修饰符。

添加这个构造函数很容易(见下文),但为什么要这样做呢?有什么好处?

    protected MyDictionary(SerializationInfo info, StreamingContext context)
        : base(info, context)
    { }

构造函数不是继承的。你的基类型有什么构造函数并不重要 - 如果你想要一个具有特定签名的构造函数用于你的class,你必须实现一个。

否则,您只会获得默认的无参数构造函数。