我知道java并且通常会放入getter / setter方法。我有兴趣使用以下代码在C#中执行此操作,但它会引发StackOverflow异常。我做错了什么?
致电代码
c.firstName = "a";
物业代码
public String firstName;
{
get
{
return firstName;
}
set
{
firstName = value;
}
}
答案 0 :(得分:98)
这是因为你递归地调用了该属性 - 在set
中你再次设置了该属性,这将继续 ad infinitum 直到你炸掉堆栈。
您需要一个私人支持字段来保存该值,例如
private string firstName;
public string FirstName
{
get
{
return this.firstName;
}
set
{
this.firstName = value;
}
}
或者,如果您使用的是C#3.0,则可以使用自动属性,为您创建隐藏的支持字段,例如
public string FirstName { get; set; }
答案 1 :(得分:14)
您在属性中设置属性名称 - 而不是字段名称。这会更好:
private string m_firstName;
public String firstName;
{
get
{
return m_firstName;
}
set
{
m_firstName = value;
}
}