Подтвердить что ты не робот

Почему свойство Set выбрасывает исключение StackOverflow?

Я знаю java и обычно добавляю методы getter/setter. Мне интересно сделать это на С# со следующим кодом, но он выдает исключение StackOverflow. Что я делаю неправильно?

Код вызова

c.firstName = "a";

Код свойства

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

Ответ 1

Это потому, что вы рекурсивно называете свойство - в set вы снова устанавливаете свойство, которое продолжается до бесконечности до тех пор, пока вы не сожжете стек.

Для хранения значения требуется частное поле поддержки, например

private string firstName;

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

В качестве альтернативы, если вы используете С# 3.0, вы можете использовать свойство auto-property, которое создает для вас скрытое поле поддержки, например

public string FirstName { get; set; }

Ответ 2

Вы устанавливаете имя свойства внутри своего свойства, а не имя поля. Это будет работать лучше:

private m_firstName;

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