J'ai lu dans de nombreux endroits que l'exposition des champs publiquement n'est pas une bonne idée, parce que si plus tard vous souhaitez modifier les propriétés, vous devrez recompiler tout le code qui utilise votre classe.
Toutefois, dans le cas de immuable classes, je ne vois pas pourquoi vous ne pourriez jamais besoin de changer de propriétés - vous n'allez pas être en ajoutant de la logique de l'ensemble, après tout.
Des idées sur ce point, ai-je raté quelque chose?
Exemple de la différence, pour ceux qui ont lu le code plus facilement que le texte :)
//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; } }
}
Bien sûr, vous pouvez utiliser l'auto-propriétés (public T1 Item1 { get; private set; }
), mais cela ne vous arrive "d'accord immutabilité' par opposition à 'garanti immutabilité'...