Я читал во многих местах, что публикация полей публично не является хорошей идеей, потому что, если вы позже захотите перейти на свойства, вам придется перекомпилировать весь код, который использует ваш класс.
Однако, в случае неизменяемых классов, я не понимаю, почему вам когда-либо понадобится изменить свойства - вы не собираетесь добавлять логику в "набор" в конце концов.
Любые мысли об этом, я что-то упускаю?
Пример разницы для тех, кто читает код более легко, чем текст:)
//Immutable Tuple using public readonly fields
public class Tuple<T1,T2>
{
public readonly T1 Item1;
public readonly T2 Item2;
public Tuple(T1 item1, T2 item2)
{
Item1 = item1;
Item2 = item2;
}
}
//Immutable Tuple using public properties and private readonly fields
public class Tuple<T1,T2>
{
private readonly T1 _Item1;
private readonly T2 _Item2;
public Tuple(T1 item1, T2 item2)
{
_Item1 = item1;
_Item2 = item2;
}
public T1 Item1 { get { return _Item1; } }
public T2 Item2 { get { return _Item2; } }
}
Конечно, вы можете использовать авто-свойства (public T1 Item1 { get; private set; }
), но это только дает вам "согласованную неизменность", а не "гарантированную неизменность"...