Защо да инстанцирате променлива в конструктора и защо да използвате свойство за достъп до променлива

Имам няколко основни въпроса. Виждам много неща като по-долу в кода:

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