Versionierung:
Ich denke, es ist nicht viel Unterschied macht, wenn Sie daran interessiert sind nur in Quelle Kompatibilität sind.
Die Verwendung einer Eigenschaft ist besser für die Binärkompatibilität, da Sie sie je nach Bibliothek durch eine Eigenschaft ersetzen können, die über einen Setter verfügt, ohne den kompilierten Code zu unterbrechen.
Convention:
Sie sind nach der Konvention. In Fällen wie diesen, in denen die Unterschiede zwischen den beiden Möglichkeiten relativ gering sind, ist die Einhaltung der Konvention besser. Ein Fall, in dem es zurückkommen könnte, um dich zu beißen, ist ein Code, der auf der Reflexion basiert.Es akzeptiert möglicherweise nur Eigenschaften und keine Felder, z. B. einen Eigenschaftseditor/-viewer.
Serialisierung
Wechsel von Feld Eigenschaft wird wahrscheinlich eine Menge Serializer brechen. Und AFAIK XmlSerializer
serialisiert nur öffentliche Eigenschaften und nicht öffentliche Felder.
Mit einem Autoproperty
eine weitere gemeinsame Variation eine autoproperty mit einem privaten Setter verwendet. Während dies kurz ist und eine Eigenschaft, erzwingt es nicht die Lesbarkeit. Also bevorzuge ich die anderen.
Read-Only-Feld wird selfdocumenting
Es ist ein Vorteil des Feldes aber:
Es macht deutlich, auf einen Blick auf die öffentliche Schnittstelle, die es tatsächlich unveränderlich ist (abgesehen von Reflexion). Während im Falle einer Eigenschaft können Sie nur sehen, dass Sie kann es nicht ändern, so dass Sie auf die Dokumentation oder Implementierung beziehen müssen.
Aber um ehrlich zu sein, benutze ich die erste ziemlich oft im Anwendungscode, da ich faul bin. In Bibliotheken bin ich normalerweise gründlicher und folge der Konvention.
C# 6.0 fügt Nur-Lese-Auto Eigenschaften
public object MyProperty { get; }
Also, wenn Sie nicht brauchen, ältere Compiler unterstützen Sie eine wirklich schreibgeschützte Eigenschaft mit dem Code haben, der als Nur-Lese-Feld nur so kurz ist.
Ich wünsche manchmal, dass die Auto-Eigenschaft-Syntax enthalten ein "Get; Nur lesen; Option. –
Mögliches Duplikat von [C#, Unveränderlichkeit und öffentliche readonly Felder] (http://stackoverflow.com/questions/2249980/c-immutability-and-public-readonly-fields) – user