鉴于课程
public class B
{
public bool flag = false;
public B()
{
}
}
当我用行
初始化它时 var jjj = new B(){flag = true};
如果我在构造函数B()中放置断点,则标志为false。我希望它是真的,因为我打电话给#34; flag = true"当我初始化它时。
我做错了什么?
答案 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);