Ich habe an vielen Stellen gelesen, dass das Freilegen von Feldern ist keine gute Idee, denn wenn Sie später zu Eigenschaften ändern möchten, müssen Sie den gesamten Code neu kompilieren, der Ihre Klasse verwendet.C#, Unveränderlichkeit und öffentliche readonly Felder
Im Falle von unveränderlichen Klassen, sehe ich jedoch nicht, warum Sie jemals zu Eigenschaften wechseln müssten - Sie werden dem Set schließlich keine Logik hinzufügen.
Irgendwelche Gedanken dazu, vermisse ich etwas?
Beispiel für den Unterschied, für diejenigen, den Code leichter als Text lesen :)
//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; } }
}
Natürlich könnten Sie auto-Eigenschaften verwenden (public T1 Item1 { get; private set; }
), aber dies nur bekommt man ‚stimmt Unveränderlichkeit‘ als im Gegensatz zu "garantierte Unveränderlichkeit" ...
Hm, eine "hypothetische neue Version von C#" Ich denke, ich weiß, wer den Blog liest, den du gelesen hast;) – Benjol
Ja, wir denken darüber nach. Hypothetisch. Es ist eigentlich ein schwierigeres Problem als es auf den ersten Blick scheint. –
@Eric Lippert, jetzt necken Sie uns nur. Ich erwarte irgendwann einen Beitrag über die Schwierigkeiten :) – Benjol