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

本文关键字:构造函数 访问 序列化 为什么 | 更新日期: 2024-10-23 20:12:59

参考此问题的答案:

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

如果我有这个通用类:

public class FooClass
{
    int X { get; set; }
    int Y { get; set; }
    private FooClass() { }
}

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

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

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

为什么

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

如何

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