【问题标题】:Why does serialization have access to private constructors?为什么序列化可以访问私有构造函数?
【发布时间】:2014-01-05 04:04:16
【问题描述】:

参考this question's answer

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

如果我有这个通用类:

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

    private FooClass() { }
}

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

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

【问题讨论】:

    标签: c# serialization constructor access-modifiers


    【解决方案1】:

    为什么

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

    如何

    您可以使用反射和Activator.CreateInstance 来使用私有/受保护/等构造函数初始化对象。其中一个overloads 采用布尔值指定构造函数是否为非公开的。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2011-12-06
      • 2021-04-17
      • 1970-01-01
      • 2018-02-20
      • 2019-10-16
      相关资源
      最近更新 更多