无参数重载构造函数调用参数化的一个?

Har*_*ter -1 .net c# asp.net

你好,抱歉这个令人困惑的标题,我无法正确表达我想说的话.关于这个问题,我该如何解释这个片段?

public class Node
{
    public long Id { get; private set; }
    /// Creates a Node which has the supplied id.
    public Node(long id) : this()
    {
        Id = id;
    }
/* */ 
}
Run Code Online (Sandbox Code Playgroud)

如果我没错; 当使用参数化构造函数创建Node时,this关键字应该调用相同的方法,但是没有参数,我认为应该默认为默认(sic),空构造函数.最后看起来这只是另一种调用空的默认构造函数的方法,这种方法毫无意义.如果构造函数按预期工作,那么如何Id实例化成员?

完整的源代码在这里:http://sourceforge.net/p/satsumagraph/code/ci/master/tree/src/Graph.cs#l38

Ree*_*sey 6

在你的实际代码中,Node是一个struct,而不是一个类.

在这种情况下,需要将调用添加到默认构造函数.没有它,您会收到一条消息,指出该对象"在分配所有字段之前无法使用",因为您在值类型中使用了自动属性.这是因为编译器添加了一个支持字段,并且必须先初始化该字段,然后才能访问该属性.构造函数尝试在初始化字段之前设置属性.每个都struct包含一个默认构造函数,并将其称为"零初始化"自动属性的支持字段,使其正常运行.

有了class,如你所说,这是不必要的(甚至不编译).