Зачем создавать экземпляр переменной в конструкторе и зачем использовать свойство для доступа к переменной

У меня есть несколько основных вопросов. Я вижу много вещей, как показано ниже в коде:

public class User
{
    private IList<Person> _person;
    public User()
    {
        _person = new IList<Person>();
    }

    public IList<Person> personList 
    {
        get { return _person; }
        (protected) set { _person = value; }
    }
}
  1. В чем преимущество создания экземпляра переменной в ctor? Почему бы не создать экземпляр при объявлении? Вы все равно создаете экземпляр переменной при создании экземпляра, так почему бы не установить ее во время объявления?

  2. Зачем устанавливать переменную как приватную, а затем разрешать доступ к ней публичному свойству? (Я поставил защищенный в скобки, и я вижу преимущество этого - разрешать только подклассам или самому себе устанавливать это свойство), но скажите, что у вас нет защищенного или частного набора. Не было бы лучше, если бы вы просто установили переменную как общедоступную?


person Mike Smith    schedule 15.08.2014    source источник
comment
по второму вопросу — csharp-station.com/Tutorial/CSharp/lesson19   -  person eddie_cat    schedule 15.08.2014
comment
И для вашего первого вопроса, что, если вы хотите передать параметры в конструктор и использовать их для создания экземпляра вашей переменной?   -  person eddie_cat    schedule 15.08.2014
comment
какой смысл иметь свою личную спальню (переменная), когда ваши родители (общественная собственность) могут просто сказать, чтобы вы ее убирали?   -  person Marc B    schedule 15.08.2014


Ответы (1)


В чем преимущество создания экземпляра переменной в ctor? Почему бы не создать экземпляр при объявлении? Вы все равно создаете экземпляр переменной при создании экземпляра, так почему бы не установить ее во время объявления?

Это то же самое. Когда вы объявляете переменную уровня класса и создаете ее экземпляр в той же строке, она будет встроена в конструктор (обычный или статический).

Подробнее об этом см. в разделе Инициализировать поля класса в конструкторе или в заявление?

Зачем устанавливать переменную как приватную, а затем разрешать доступ к ней публичному свойству? (Я поставил защищенный в скобки, и я вижу преимущество этого - разрешать только подклассам или самому себе устанавливать это свойство), но скажите, что у вас нет защищенного или частного набора. Не было бы лучше, если бы вы просто установили переменную как общедоступную?

Потому что свойство, которое транслируется в вызов метода, может позволить вам сделать больше внутри него, прежде чем устанавливать переменную. Простым примером этого может быть проверка входного значения на то, что вы ожидаете.

Дополнительные различия см. в разделе Общие поля и автоматические свойства.

person Yuval Itzchakov    schedule 15.08.2014