为什么Property Set会抛出StackOverflow异常?

时间:2008-12-15 00:09:58

标签: c#

我知道java并且通常会放入getter / setter方法。我有兴趣使用以下代码在C#中执行此操作,但它会引发StackOverflow异常。我做错了什么?

致电代码

c.firstName = "a";

物业代码

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

2 个答案:

答案 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;
    }
}