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

C# 为什么序列化可以访问私有构造函数?,c#,serialization,constructor,access-modifiers,C#,Serialization,Constructor,Access Modifiers,关于: 请注意,构造函数不必是公共的。大多数序列化程序都能很好地处理私有的无参数构造函数,或者根本没有,如果它们实现为使用未初始化的对象构造,则至少在.Net完整配置文件中可以通过反射获得 如果我有这个通用类: public class FooClass { int X { get; set; } int Y { get; set; } private FooClass() { } } 序列化程序如何访问私有构造函数?我一直认为它们是某种外部库,我很好奇为什么/如何调

关于:

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

如果我有这个通用类:

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

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

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

为什么

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

如何

您可以使用反射来使用私有/受保护/etc构造函数初始化对象。其中一个函数采用布尔值,指定构造函数是否为非公共构造函数。

为什么

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

如何

您可以使用反射来使用私有/受保护/etc构造函数初始化对象。其中一个函数采用布尔值,指定构造函数是否为非公共构造函数。

为什么

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

如何

您可以使用反射来使用私有/受保护/etc构造函数初始化对象。其中一个函数采用布尔值,指定构造函数是否为非公共构造函数。

为什么

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

如何

您可以使用反射来使用私有/受保护/etc构造函数初始化对象。其中一个函数采用布尔值,指定构造函数是否为非公共构造函数