Mit diesem Code können externe Entitäten Ihre Werte lesen, während Ihr Code das Backing-Feld intern ändern kann.
Sie können Kurz Hand, dass Auto-Eigenschaften mit:
public string Text { get; private set; }
public string[] Values { get; private set; }
Mit einem öffentlichen Bereich, würden Sie nicht in der Lage sein, gegen äußere Veränderung zu schützen und interne Modifikation zugleich unterstützen.
Selbst wenn Sie ein Feld extern beschreibbar machen möchten, würde ich dennoch vorschlagen, das Ding in eine Eigenschaft zu kapseln - Sie wissen nie, ob Sie intern etwas unterstützen müssen, ohne den externen Vertrag zu brechen (benutzerdefinierter Code im set/get) gibt Ihnen Raum, dies zu tun).
Ganz zu schweigen von den meisten Datenbindung Frameworks nicht Felder sehen, nur Eigenschaften.
Beachten Sie, dass Sie * sehr, sehr vorsichtig * sein sollten, wenn Sie ein Array als schreibgeschützte Eigenschaft einer Klasse verfügbar machen. ** Der Array-Verweis ist schreibgeschützt, der Array-Inhalt jedoch nicht. ** Der Benutzer dieser Klasse kann den Inhalt des Arrays nach Belieben mutieren. Wenn das nicht erwünscht ist, geben Sie stattdessen eine 'ReadOnlyCollection', keine 'string []' zurück. –
Erics detaillierte Gedanken zu diesem Thema: http://blogs.msdn.com/b/ericlippert/archive/2008/09/22/arrays-consided-somewhatful.aspx – SolutionYogi