呼叫代码
c.firstName = "a";
属性代码
public String firstName;
{
get
{
return firstName;
}
set
{
firstName = value;
}
}
#1 楼
这是因为您要递归调用该属性-在set
中,您要再次设置该属性,该属性将无限期地进行下去,直到炸毁堆栈为止。 private string firstName;
public string FirstName
{
get
{
return this.firstName;
}
set
{
this.firstName = value;
}
}
或者,如果您使用的是C#3.0,则可以使用自动属性,该属性为您创建一个隐藏的后备字段,例如
public string FirstName { get; set; }
#2 楼
您正在属性中设置属性名称,而不是字段名称。这样会更好:private string m_firstName;
public String firstName;
{
get
{
return m_firstName;
}
set
{
m_firstName = value;
}
}
评论
不知道如何调用隐藏的支持字段。感谢yor的自动属性。
–宽带
16年8月22日在12:38
我真不敢相信这是一个解决方案……我对C#的信念现在几乎消失了。
–丹尼尔(Daniel)
18年11月7日在20:24
e,如果您认为这很糟糕,我不希望看到您编写Java。
–卢卡斯·勒布朗(Lucas Leblanc)
19年5月24日在20:48
您能否解释一下,它是如何炸毁堆栈的?在二传手中徘徊着不一样的价值吗?
– Arli Chokoev
2月25日9:51
@ArliChokoev不,请注意大小写:该属性称为FirstName,成员变量称为firstName。为了减少这种混乱,许多开发人员更喜欢为成员加_或m_作为前缀,这样更加明显。
– PMF
5月10日5:58