C# 为什么不是';t构造函数中设置的值

C# 为什么不是';t构造函数中设置的值,c#,C#,在课堂上 public class B { public bool flag = false; public B() { } } 当我用行初始化它时 var jjj = new B(){flag = true}; 如果我在构造函数B()中放置断点,则标志为false。我希望它是真的,因为我在初始化它时调用了“flag=true” 我做错了什么 该语法相当于: var temp = new B(); temp.flag = true; var jjj = temp; v

在课堂上

public class B
{
  public bool flag = false;

  public B()
  {
  }
}
当我用行初始化它时

  var jjj = new B(){flag = true};
如果我在构造函数B()中放置断点,则标志为false。我希望它是真的,因为我在初始化它时调用了“flag=true”


我做错了什么

该语法相当于:

var temp = new B();
temp.flag = true;
var jjj = temp;
var jjj = new B();
jjj.flag = true;
因此,在构造函数中,
标志
仍然是
,之后从外部设置

这不是向构造函数中注入更多代码的特殊语法,这一切都是在之后发生的

请注意,它并不等同于此:

var temp = new B();
temp.flag = true;
var jjj = temp;
var jjj = new B();
jjj.flag = true;
在本例中,这可能无关紧要,但如果
jjj
是一个字段或属性,则可能会公开一个未提前配置的对象。因此,在初始化对象时,会构造一个临时变量来保存该对象,只有在初始化之后,该对象才会存储到其预期目标中

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


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

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

创建一个构造函数,如:

public class B
{
  public bool flag = false;

  public B()
  {
  }

  public B(bool Flag)
  {
    flag = Flag;
  }
}
然后试着这样称呼它:

var jjj = new B(true);

OP用于设置
标志
变量的语法在构造函数之外进行设置。您没有回答问题question@Selman22我只是回答了我对这个问题的了解。我认为这是我方尽可能多地帮助OP的努力。此外,我不是一个伟大的开发人员。我正在学习C#,我的目的是尽我所能帮助人们。但在这个问题上,重点似乎是“为什么”,而不是“给我找个解决办法”。好吧,那么我不知道答案