Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无参数重载构造函数调用参数化构造函数?_C#_Asp.net_.net - Fatal编程技术网

C# 无参数重载构造函数调用参数化构造函数?

C# 无参数重载构造函数调用参数化构造函数?,c#,asp.net,.net,C#,Asp.net,.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; } /* */ } 如果我没有错;当使用参数化构造函数创建节点时

您好,很抱歉标题混乱,我无法正确表达我想说的话。 关于这个问题,我应该如何解释这个片段

public class Node
{
    public long Id { get; private set; }
    /// Creates a Node which has the supplied id.
    public Node(long id) : this()
    {
        Id = id;
    }
/* */ 
}
如果我没有错;当使用参数化构造函数创建节点时,
this
关键字应调用相同的方法,但不带参数,我认为该方法应默认为默认(sic)空构造函数。最后,看起来这只是调用空的默认构造函数的另一种方式,这是毫无意义的。 如果构造函数按预期工作,如何实例化
Id
成员


完整的源代码在这里:

在您的实际代码中,
节点
是一个
结构
,而不是一个类

在这种情况下,需要添加对默认构造函数的调用。如果没有它,您将收到一条消息,说明对象“在其所有字段都指定给之前无法使用”,因为您正在值类型中使用自动属性。这是因为编译器添加了一个支持字段,必须先初始化该字段,然后才能访问该属性。构造函数试图在初始化字段之前设置属性。每个
struct
都包含一个默认构造函数,将其称为“zero”将初始化自动属性的支持字段,从而使其能够正确运行

对于
,正如您所演示的,这将是不必要的(甚至不需要编译)。

根据:-

构造函数可以使用this关键字调用同一对象中的另一个构造函数。与base一样,它可以与参数一起使用,也可以不与参数一起使用,构造函数中的任何参数都可以作为该函数的参数使用,或者作为表达式的一部分使用

编译上述代码时,应该会出现错误,因为您尚未定义无参数构造函数

因此,当您这样做时:

  public Node(long id) : this()
  {
      Id = id;
  }

您正在尝试调用未定义的无参数构造函数

您当前的代码没有默认构造函数(无参数),您应该会得到一个错误:“Node”不包含接受0参数的构造函数该代码不是实际代码-您可以显示真实的代码吗?请注意,Graph.cs类中的实际代码显示Node是一个结构,不是类:这不是一个好主意,但是如果您想初始化,那么在参数化构造函数中使用默认参数。long id=0完美,这毕竟是我的阅读错误。谢谢你的解释!