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#,我的目的是尽我所能帮助人们。但在这个问题上,重点似乎是“为什么”,而不是“给我找个解决办法”。好吧,那么我不知道答案