Свойства с или без частных полей

Что более "верно": используйте свойства с закрытыми полями или без них. Т.е.

1.

class A
{
    int _field;
    public int Field
    {
        get{ return _field;}
        set{_field = value;}
    }
}

2.

class A
{
    public int Field{get;private set;}
}

4 ответа

Номер 2 создает поле поддержки автоматически, поэтому у вас всегда есть закрытое поле "за кулисами" (хотя в последнем случае оно недоступно напрямую).

Когда вы создаете анонимное свойство, компилятор создает соответствующее поле для вас, так что это почти то же самое, но вы можете получить доступ к автоматически созданному полю только через свойство

Как уже было сказано, второе создает вспомогательное поле во время компиляции. Как правило, вы сами определяете вспомогательное поле, если хотите, чтобы свойство действовало как открытый метод доступа к полю, где вы можете добавить пользовательскую логику или предотвратить изменение значения (используя ключевое слово private в установщике).

Это не имеет значения - компилятор генерирует реализацию свойства для вас точно так же, как он генерирует конструктор по умолчанию или код для using заявление. Эти два класса почти на 100% эквивалентны, что можно увидеть, если декомпилировать авто-свойство (единственное отличие - это имя сгенерированного вспомогательного поля, которое использует компилятор)

class A
{
    public int Field {get; private set;}
}

class A
{
    int _field;
    public int Field
    {
        get { return _field; }
        private set {_field = value; }
    }
}

Это полностью зависит от ваших личных предпочтений.

Другие вопросы по тегам