Frage

Ich habe gesehen, dass die meisten Leute Mitgliedsvariablen in einer Klasse verwenden wie:

string _foo;
public string foo { get { return _foo; }; private set { _foo = value}; }

Aber was ist der Unterschied dazu?

public string foo { get; private set; }
War es hilfreich?

Lösung

In einfachen Fällen solche Fälle, aber in derselben, aber in komplexeren Fällen, in denen Sie Feuerveranstaltungen feuern oder etwas, das Sie zusätzlichen Code in der Get und einstellen benötigen, sodass Sie das Mitglied ex:

brauchen generasacodicetagpre.

Andere Tipps

Solange die Eigenschaftsimplementierung eigentlich nichts anderes tut, als abzurufen und festzulegen, ist der Unterschied recht gering.Die Gründe dafür können sein:

  • Legacy-Code vor C# 3.0 (der automatische Eigenschaften hinzufügte, d. h.Die public string Name { get; set; } Syntax.
  • Ich gehe davon aus, dass ich irgendwann die Implementierung des Getter/Setters ändern muss.
  • Anforderungen für einige benutzerdefinierte Serialisierungen.
  • Aus irgendeinem Grund das zugrunde liegende Feld im Code verwenden.Ein gutes Beispiel könnte die Verwendung des Hintergrundfelds als sein ref Parameter für eine Methode.Dazu gehören auch Dinge wie die Verwendung des Werts in nativer Interop (GCHandle usw.).
  • Einfache Benutzerpräferenz.Normalerweise verwende ich keine automatischen Eigenschaften, da ich die Hintergrundfelder gerne manuell spezifiziere.
  • Verwendung einer readonly Ein Backing-Feld ist bei Verwendung automatischer Eigenschaften nicht möglich.

Dies ist nur die Spitze des Eisbergs.Es gibt auch jede Menge seltsame Gründe, zum Beispiel die Notwendigkeit, das Feld explizit zu deklarieren, damit jemand aus irgendeinem Grund mithilfe von Reflektion darauf zugreifen kann.

Vor der Einführung von "Automatikeigenschaften" müssen wir einiges "Rückenfeld" für die Vorschläge verwenden.Meistens gibt die Vorschläge einfach den Wert an / setzen Sie den Wert auf das "Rückenfeld" wie im folgenden Beispiel.

generasacodicetagpre.

Mit der Einführung von "Automatikeigenschaften" können wir einfach das "Rückenfeld" ignorieren (oder wir müssen nicht angeboten werden).Dies ist meistens geeignet, wenn Ihr Design das obige Beispiel ist, aber wenn Sie jedoch ein paar benutzerdefinierte Logik durchsetzen müssen, während Sie beim Abrufen des Werts oder bevor Sie den Wert einstellen, müssen wir dem "guten alten Design" noch folgen (dh mitdas Rückenfeld)

Verschiedenes Szenario gibt verschiedene Vorteile.

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top