鉴于上课
public class B
{
public bool flag = false;
public B()
{
}
}
Run Code Online (Sandbox Code Playgroud)
当我用线初始化它时
var jjj = new B(){flag = true};
Run Code Online (Sandbox Code Playgroud)
如果我在构造函数B()中放置一个断点,则flag为false.我预计它是真的,因为我在初始化时调用了"flag = true".
我究竟做错了什么?
该语法等同于:
var temp = new B();
temp.flag = true;
var jjj = temp;
Run Code Online (Sandbox Code Playgroud)
所以在构造函数中,flag仍然是false,然后从外部设置.
这不是将更多代码注入构造函数的特殊语法,之后都会发生.
请注意,这是不相同的:
var jjj = new B();
jjj.flag = true;
Run Code Online (Sandbox Code Playgroud)
虽然在这种情况下它可能无关紧要,但如果jjj是字段或属性,则可能会暴露出您未提前配置的对象.因此,构造临时变量以在初始化对象时保持对象,并且之后仅将对象存储到其预期目标中.
以下是有关对象初始值设定项的更多信息:
附录:正如@Tim在评论中提到的,如果你真的想要一个初始化的构造函数,flag你应该添加一个带有正确参数的重载构造函数:
public B(bool flagValue)
{
flag = flagValue;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |