Почему набор свойств генерирует исключение StackOverflow? - PullRequest
45 голосов
/ 15 декабря 2008

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

Телефонный код

c.firstName = "a";

Код недвижимости

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

Ответы [ 2 ]

99 голосов
/ 15 декабря 2008

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

Вам необходимо личное поле для хранения значения, например,

private string firstName;

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

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

public string FirstName { get; set; }
14 голосов
/ 15 декабря 2008

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

private string m_firstName;

public String firstName;
{
    get
    {
        return m_firstName;
    }
    set
    {
        m_firstName = value;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...