我写了一些效果很好的代码,但我不明白为什么它有效.我想序列化一个类,让我们说一个整数.所以这是类的代码.
[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不检查具有默认参数的构造函数.但是为什么编译器仍然允许这个代码呢?
我对此很好奇,但也希望学习并更好地了解内部的工作方式.谷歌搜索没有带来任何有用的东西,也许只是因为我无法想到正确的搜索条件.