Frage

Was ist der Unterschied zwischen privaten Eigenschaften anstelle von privaten Feldern mit

private String MyValue { get; set; }

// instead of

private String _myValue;

public void DoSomething()
{
   MyValue = "Test";

   // Instead of

   _myValue = "Test";
}

Gibt es ein Performance-Problem? oder einfach nur eine Namenskonvention?

War es hilfreich?

Lösung

Privat Eigenschaften können Sie abstrahieren Ihre internen Daten, so dass Änderungen an der internen Darstellung nicht andere Teile der Implementierung beeinflussen müssen, auch in der gleichen Klasse. Private Felder nicht diesen Vorteil bieten. Mit automatischen Eigenschaften in C # 3.0, sehe ich selten ein Bedürfnis Felder direkt zu implementieren -. Privat oder öffentlich

Andere Tipps

Der große Gewinn Sie aus einer Eigenschaft erhalten können (privat, öffentlich, ...) ist, dass es einen berechneten Wert im Vergleich zu einem Sollwert erzeugen kann. Zum Beispiel

class Person { 
  private DateTime _birthday;
  private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}

Der Vorteil dieses Musters ist, dass nur ein Wert aktualisiert werden müssen, für N andere Werte die Änderung widerzuspiegeln. Dies gilt für die Eigenschaften unabhängig von Zugänglichkeit. Es gibt keinen spezifischen Vorteil ein Privateigentum gegen Nicht-Privateigentum (außer es privat natürlich ist)

Sie würden wollen, selten eine Eigenschaft privat machen. Die Rückstellung für eine Immobilie privat sein nur der Vollständigkeit halber vorgesehen ist. Und wenn Sie Ihre Immobilie einfach wird immer / den Wert des Feldes einstellen dann gibt es keinen Unterschied in der Leistung, weil es wird höchstwahrscheinlich durch den JIT-Compiler inlined werden.

Andere dann, was bereits beantwortet wurde, Performance, symantics und Vollständigkeit gibt es einen gültigen Fall habe ich für private Eigenschaften anstelle eines privaten Bereich gesehen:

public class Item
{
    private Item _parent;
    private List<Item> _children;

    public void Add(Item child)
    {
        if (child._parent != null)
        {
            throw new Exception("Child already has a parent");
        }
        _children.Add(child);
        child._parent=this;
    }
}

Lassen Sie uns sagen, dass wir nicht wollen, Eltern belichten für welchen Gründen auch immer, aber wir möchten vielleicht auch Validierungsprüfungen tun. Sollte ein Elternteil der Lage sein, als Kind hinzugefügt werden, um eines seiner Kinder?

Um dies zu lösen, die Sie kann dies eine Eigenschaft machen und einen Scheck für zirkuläre Referenzen ausführen.

Zugang zur Immobilie wird (fraktionierte) langsamer sein, da sie die Getter / Setter nennen. Der Vorteil ist, dass Sie die Datenvalidierung tun können, die dann zu Nachfolgern unten filtern können, wenn Sie die Eigenschaft ändern zum Beispiel geschützt werden.

Wenn mit privatem Zugang zu tun, sind die Unterschiede sehr klein. Ja, es ist ein Performance-Einbußen (die durch die JIT optimiert werden können) senden Eigenschaften einen Methodenaufruf darstellen, anstelle einer direkten Adresse Zugriff.

Der Hauptvorteil Eigenschaften zu verwenden ist, um die Umsetzung zu ermöglichen, zu ändern, ohne die äußere Signatur ändern erforderlich. Da diese privat zugegriffen wird, nur Änderungen an der Implementierung lokalen Code bewirkt.

Wenn Sie mit privaten Mitgliedern zu tun, sehe ich keinen Vorteil aus den Eigenschaften gewonnen, mit Ausnahme von Konventionen Ihres Teams.

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