Czytałem w wielu miejscach, że publiczne eksponowanie pól nie jest dobrym pomysłem, ponieważ jeśli później chcesz zmienić właściwości, będziesz musiał przekompilować cały kod, który używa twojej klasy.C#, niezmienność i publiczne pola tylko do odczytu
Jednak w przypadku klas niezmiennych, nie widzę powodu, dla którego kiedykolwiek musiałbyś zmienić właściwości - w końcu nie zamierzasz dodawać logiki do "zestawu".
Jakieś przemyślenia na ten temat, czy czegoś brakuje?
Przykład różnicy, dla tych, którzy łatwiej odczytać kodu niż tekst :)
//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; } }
}
Oczywiście, można korzystać z funkcji automatycznego właściwości (public T1 Item1 { get; private set; }
), ale to tylko dostaje „zgodził niezmienność” jako w przeciwieństwie do "gwarantowanej niezmienności" ...
Hm, jest „hipotetyczna nowa wersja C#” Myślę, że wiem, kto jest blogiem, którego czytasz;) – Benjol
Tak, rozważamy to. Hipotetycznie. Jest to raczej trudniejszy problem, niż się wydaje na pierwszy rzut oka. –
@Eric Lippert, teraz tylko się z nami drażnisz. Oczekuję wkrótce postu o trudnościach :) – Benjol