为什么序列化可以访问私有构造函数?

时间:2013-12-17 11:52:17

标签: c# serialization constructor access-modifiers

参考this question's answer

  

请注意,构造函数不必是公共的。如果实现使用未初始化的对象构造,大多数序列化程序都可以很好地使用私有无参数构造函数,或者根本不使用它们,这可以从至少.Net完整配置文件中的Reflection中获得。

如果我有这个通用类:

public class FooClass
{
    int X { get; set; }
    int Y { get; set; }

    private FooClass() { }
}

序列化程序如何访问私有构造函数?我一直认为它们是某种外部库,我很好奇为什么/如何调用私有构造函数,而我不可能在课堂外手动编写。

我理解为什么你需要一个私人建筑,但我很好奇它是如何运作的。

1 个答案:

答案 0 :(得分:3)

<强>为什么

因为您可能希望在以不同方式编组/解组对象(跨应用程序域,跨网络等)编译实例时进行初始化。换句话说,您可能有不同的业务逻辑用于创建空白状态实例以及从预先存在的状态创建克隆。

如何

您可以使用Activator.CreateInstance反射来使用private / protected / etc构造函数初始化对象。其中一个overloads接受一个布尔值,指定构造函数是否为非公共。