Я читал во многих местах, что публиковать поля публично - это не очень хорошая идея, потому что, если вы позже захотите перейти на свойства, вам придется перекомпилировать весь код, который использует ваш класс.C#, неизменяемость и общедоступные поля readonly
Однако, в случае неизменяемых классов, я не понимаю, почему вам нужно будет изменить свойства - вы не собираетесь добавлять логику в «набор» в конце концов.
Любые мысли об этом, я что-то упускаю?
Пример разницы, для тех, кто читает код более легко, чем текст :)
//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; }
), но это только получает вас «согласился неизменность», как против «гарантированной неизменности» ...
Hm, «гипотетическая новая версия C#» Кажется, я знаю, кто блог, который вы читали;) – Benjol
Да, мы это рассматриваем. Гипотетически. На самом деле это довольно сложная проблема, чем кажется на первый взгляд. –
@ Эрик Липперт, теперь ты просто дразнишь нас. Я ожидаю сообщение о трудностях в ближайшее время :) – Benjol