为什么不在构造函数中设置值

时间:2014-07-21 21:11:54

标签: c#

鉴于课程

public class B
{
  public bool flag = false;

  public B()
  {
  }
}

当我用行

初始化它时
  var jjj = new B(){flag = true};

如果我在构造函数B()中放置断点,则标志为false。我希望它是真的,因为我打电话给#34; flag = true"当我初始化它时。

我做错了什么?

2 个答案:

答案 0 :(得分:9)

该语法等同于:

var temp = new B();
temp.flag = true;
var jjj = temp;

所以在构造函数中,flag仍为false,之后从外部设置。

这不是更多代码注入构造函数的特殊语法,之后都会发生。

请注意, 等效于此:

var jjj = new B();
jjj.flag = true;

虽然在这种情况下它可能无关紧要,但如果jjj是字段或属性,则可能会暴露您未提前配置的对象。因此,临时变量被构造为在初始化对象时保持对象,并且之后只有对象存储在其预期目的地中。

以下是有关对象初始值设定项的更多信息:


附录:正如@Tim在评论中提到的,如果你真的想要一个初始化flag的构造函数,你应该添加一个带有正确参数的重载构造函数:

public B(bool flagValue)
{
    flag = flagValue;
}

答案 1 :(得分:1)

创建一个构造函数,如:

public class B
{
  public bool flag = false;

  public B()
  {
  }

  public B(bool Flag)
  {
    flag = Flag;
  }
}

然后尝试将其称为:

var jjj = new B(true);