为什么属性集抛出StackOverflowexception?

我知道java,通常会把getter / setter方法。 我有兴趣在C#中使用下面的代码,但它会引发StackOverflowexception。 我究竟做错了什么?

调用代码

c.firstName = "a"; 

财产代码

 public String firstName; { get { return firstName; } set { firstName = value; } } 

这是因为你正在recursion地调用属性 – 在你设置的属性再次,这将继续无限的,直到你吹堆栈。

你需要一个私人支持字段来保存值,例如

 private string firstName; public string FirstName { get { return this.firstName; } set { this.firstName = value; } } 

或者,如果您使用C#3.0,则可以使用自动属性,为您创build隐藏的后台字段,例如

 public string FirstName { get; set; } 

您正在设置您的属性内的属性名称 – 而不是字段名称。 这会更好:

 private m_firstName; public String firstName; { get { return m_firstName; } set { m_firstName = value; } }