2008-12-15 57 views
33

我知道java,通常会放入getter/setter方法。我有兴趣在C#中使用下面的代码,但它会抛出StackOverflow异常。我究竟做错了什么?为什么Property Set会抛出StackOverflow异常?

长途区号

c.firstName = "a"; 

属性代码

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

回答

83

这是因为你在递归调用的属性 - 在set你重新设置该属性,继续循环往复直到你吹堆栈。

您需要私人支持字段来保存该值,例如另外,如果您使用的是C#3.0,则可以使用auto-property,它会为您创建一个隐藏的后台字段,例如,

public string FirstName { get; set; } 
+0

您的第一个示例中有错误。在名字后面删除分号。 Picky,我知道。没关系,我会修复它 – Les 2012-08-11 14:12:11

+0

固定...只有4年晚了;-) – 2012-08-11 22:44:49

12

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

private m_firstName; 

public String firstName; 
{ 
    get 
    { 
     return m_firstName; 
    } 
    set 
    { 
     m_firstName = value; 
    } 
} 
相关问题