English 中文(简体)
与有违约参数的建筑商一道进行序列化的参数构造,为什么会发挥作用?
原标题:Parameterless constructor for serialisation in combination with constructor who has default parameter, why does it work?

我已经写出一些行之有效的法典,但我不理解为什么它发挥作用。 我想把一个类别编成序,我要说的是愤怒。 因此,这里是该阶级的法典。

[Serializable]
public class TestClass
{
    public int Variable;
}

现在,我希望能够创建这一类别的例子,并设定<代码>可读。 因此,我为序列仪设立了一个构造者,还设立了一个私人违约构造者。

[Serializable]
public class TestClass
{
    public int Variable;

    private TestClass() {}

    public TestClass(int value)
    {
        Variable = value;
    }     
}

因此,在Im使用这一标准时,缺省参数变得多余。 因此,我对公共建筑商适用这种技术。

[Serializable]
public class TestClass
{
    public int Variable;

    private TestClass() {}

    public TestClass(int value = 0)
    {
        Variable = value;
    }     
}

所有这一切都奏效,但原因何在? 我们现在没有两个具有相同定义的建筑商吗? 即使我使违约施工者公开,所有东西都行不通。 一旦我搬走了违约建筑商,它就失败了序列化。 我的第一gues是,XmlSerialize of 。 NET对有违约参数的建筑商进行拖网检查。 但汇编者为什么仍然允许这一守则?

我对此感到奇怪,但也希望学习和更好地了解内部如何工作。 果真 t不会带来任何好处,或许是因为我无法思考正确的搜索条件。

最佳回答

XmlSerializer特别要求其序列号为无参数建筑商,如果你在你的私人建筑商中打断点,你就会注意到它曾打过脱硫。 一位有违约理由的建筑商并不是一个无参数的构造者,它是一个具有参数的构造者:,由汇编者插入<>。

单凭违约理由(或同一情况下的任何方法)超负荷处理小构造者诉构造者,其特有性。 在大量其他超负荷分辨规则中,C# 4.0 语言规格(7.5.3.2 功能优异成员)规定:

Otherwise if all parameters of MP have a corresponding argument whereas default arguments need to be substituted for at least one optional parameter in MQ then MP is better than MQ.

从这一信息来看,我们可以简化并询问你拥有的建筑商。 当你说<条码>新测验Class()时,应当选取什么?

  1. We have specified all of the arguments that we would like to pass to the call. In this case, it s zero.

  2. Is there a constructor with exactly zero arguments that is visible to the caller?

  3. 如果是,请它。

  4. 否则,就说下一个最佳东西。 在该案中,它向你们的施工者提出不实论点。

请注意,XmlSerializer does not compliance with these Rules。 它特别知道它想要什么,如果你不提供,将抱怨。

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...