gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:37:10 25 4
gpt4 key购买 nike

给定类

public class B
{
public bool flag = false;

public B()
{
}
}

当我用这条线初始化它时

  var jjj = new B(){flag = true};

如果我在构造函数 B() 中放置一个断点,flag 为 false。我希望它是真的,因为我在初始化它时调用了“flag = true”。

我做错了什么?

最佳答案

该语法等同于:

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

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

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

请注意,它等同于此:

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

虽然在这种情况下这可能无关紧要,但如果 jjj 是一个字段或属性,您可能会公开一个您没有及早完成配置的对象。因此,会构造一个临时变量来在初始化时保存您的对象,并且只有在初始化之后该对象才会存储到其预期目的地。

这里有一些关于对象初始化器的更多信息:


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

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

关于c# - 为什么不在构造函数中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24874854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com