小编Chr*_*hts的帖子

用于序列化的无参数构造函数与具有默认参数的构造函数相结合,为什么它可以工作?

我写了一些效果很好的代码,但我不明白为什么它有效.我想序列化一个类,让我们说一个整数.所以这是类的代码.

[Serializable]
public class TestClass
{
    public int Variable;
}
Run Code Online (Sandbox Code Playgroud)

现在我想有可能创建这个类的实例并立即设置Variable.所以我为序列化器创建了一个构造函数和一个私有默认构造函数.

[Serializable]
public class TestClass
{
    public int Variable;

    private TestClass() {}

    public TestClass(int value)
    {
        Variable = value;
    }     
}
Run Code Online (Sandbox Code Playgroud)

所以在我使用它的代码中,默认参数变得很方便.所以我将该技术应用于公共构造函数.

[Serializable]
public class TestClass
{
    public int Variable;

    private TestClass() {}

    public TestClass(int value = 0)
    {
        Variable = value;
    }     
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但为什么呢?我们现在没有两个具有相同定义的构造函数吗?即使我将默认构造函数设为public,一切正常.删除默认构造函数后,它会在序列化时失败.我的第一个猜测是.NET的XmlSerialize不检查具有默认参数的构造函数.但是为什么编译器仍然允许这个代码呢?

我对此很好奇,但也希望学习并更好地了解内部的工作方式.谷歌搜索没有带来任何有用的东西,也许只是因为我无法想到正确的搜索条件.

c# reflection constructor language-design xml-serialization

3
推荐指数
1
解决办法
1041
查看次数