При реализации установщика для свойства List (в C #) плохо ли писать так:
private List<string> _TheList = new List<string>();
public List<string> TheList
{
get { return _TheList; }
set { _TheList = value; }
}
Если не записывать как:
private List<string> _TheList = new List<string>();
public List<string> TheList
{
get { return _TheList; }
set { _TheList = new List<string>(value); }
}
До сегодня я обычно использовал первое, но недавно я нашел некоторый код, который использовал второе, и мне показалось, что это, вероятно, правильный способ реализовать это.
Не будет использовать первый, потому что свойство TheList будет изменено, когда изменения вносятся во внешний список, который ему назначается. Например:
List<string> list = new List<string>();
list.Add("Hello");
var c = new someClass();
c.TheList = list;
Использование первого не нарушит ли следующий код инкапсуляции TheList:
list.Clear();
Теперь c.List также пуст, что может быть не тем, что мы хотели. Однако, используя последний подход, c.List не будет очищен.