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

Ada*_*man 49 c#

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

致电代码

c.firstName = "a";
Run Code Online (Sandbox Code Playgroud)

物业代码

public String firstName;
{
    get
    {
        return firstName;
    }
    set
    {
        firstName = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ech 104

这是因为你递归地调用了属性 - 在set你再次设置属性的情况下,这将无限期地继续,直到你打击堆栈.

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

private string firstName;

public string FirstName
{
    get
    {
        return this.firstName;
    }
    set
    {
        this.firstName = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)


Mic*_*ren 14

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

private string m_firstName;

public String firstName;
{
    get
    {
        return m_firstName;
    }
    set
    {
        m_firstName = value;
    }
}
Run Code Online (Sandbox Code Playgroud)