C# 为什么属性集引发StackOverflow异常?

C# 为什么属性集引发StackOverflow异常?,c#,C#,我了解java,通常会使用getter/setter方法。我对用C#编写以下代码感兴趣,但它会引发StackOverflow异常。我做错了什么 呼叫码 c.firstName = "a"; 属性代码 public String firstName; { get { return firstName; } set { firstName = value; } } 这是因为您正在递归地调用属性-在集合中,您正在再次设

我了解java,通常会使用getter/setter方法。我对用C#编写以下代码感兴趣,但它会引发StackOverflow异常。我做错了什么

呼叫码

c.firstName = "a";
属性代码

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

这是因为您正在递归地调用属性-在
集合中,您正在再次设置属性,这将无限期地继续,直到您破坏堆栈

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

private string firstName;

public string FirstName
{
    get
    {
        return this.firstName;
    }
    set
    {
        this.firstName = value;
    }
}
或者,如果您使用的是C#3.0,您可以使用auto属性,它为您创建一个隐藏的支持字段,例如

public string FirstName { get; set; }

您正在属性中设置属性名,而不是字段名。这样做会更好:

private string m_firstName;

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

不知道如何调用
隐藏的备份字段
。谢谢你的汽车财产。我不敢相信这是一个解决方案。。。我对C#的信仰现在几乎消失了。哎呀,如果你认为这不好,我不想看到你写Java。你能解释一下,它是如何毁掉这堆东西的吗?相同的值不是在setter中徘徊吗?@ArliChokoev否,注意大小写:属性名为
FirstName
,成员变量名为
FirstName
。为了减少这种混淆,许多开发人员更喜欢在成员前面加上
\uu
m
,因此这一点更加明显。