C# 为什么属性集引发StackOverflow异常?
我了解java,通常会使用getter/setter方法。我对用C#编写以下代码感兴趣,但它会引发StackOverflow异常。我做错了什么 呼叫码C# 为什么属性集引发StackOverflow异常?,c#,C#,我了解java,通常会使用getter/setter方法。我对用C#编写以下代码感兴趣,但它会引发StackOverflow异常。我做错了什么 呼叫码 c.firstName = "a"; 属性代码 public String firstName; { get { return firstName; } set { firstName = value; } } 这是因为您正在递归地调用属性-在集合中,您正在再次设
c.firstName = "a";
属性代码
public String firstName;
{
get
{
return firstName;
}
set
{
firstName = value;
}
}
这是因为您正在递归地调用属性-在
集合中,您正在再次设置属性,这将无限期地继续,直到您破坏堆栈
您需要一个私有支持字段来保存该值,例如
private string firstName;
public string FirstName
{
get
{
return this.firstName;
}
set
{
this.firstName = value;
}
}
或者,如果您使用的是C#3.0,您可以使用auto属性,它为您创建一个隐藏的支持字段,例如
public string FirstName { get; set; }
您正在属性中设置属性名,而不是字段名。这样做会更好:
private string m_firstName;
public String firstName;
{
get
{
return m_firstName;
}
set
{
m_firstName = value;
}
}
不知道如何调用隐藏的备份字段
。谢谢你的汽车财产。我不敢相信这是一个解决方案。。。我对C#的信仰现在几乎消失了。哎呀,如果你认为这不好,我不想看到你写Java。你能解释一下,它是如何毁掉这堆东西的吗?相同的值不是在setter中徘徊吗?@ArliChokoev否,注意大小写:属性名为FirstName
,成员变量名为FirstName
。为了减少这种混淆,许多开发人员更喜欢在成员前面加上\uu
或m
,因此这一点更加明显。