Verwenden Sie Daten der Mitglieder oder der Öffentlichkeit Eigenschaften innerhalb der Klasse selbst?

StackOverflow https://stackoverflow.com/questions/1075988

Frage

Wenn ich eine einfache Klasse wie folgt einrichten:

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

Welches sollte ich nutzen, die öffentliches Eigentum oder der Daten-Mitglied?

Natürlich, in diesem Beispiel ist es nicht einen Unterschied machen, da Sie beide einfach auf die gleiche variable.Aber was ist mit der realen Welt verwendet der Öffentlichen Eigenschaften?

Im Allgemeinen, tun Sie Öffentliche Eigenschaften führen sehr wenig, in dem Fall ist es OK, Sie zu nennen?Oder machen die Leute setzen eine Menge von Funktionen in Ihre Öffentlichen Eigenschaften, und Sie sollten nicht aufgerufen werden, die von internen Referenzen?

Ich sah etwas in einem anderen post über NICHT setzen viele Funktionen in die Eigenschaften, da Ihre Untersuchung im Debugger ausführen können unerwartete Ergebnisse.Ist das wahr?

War es hilfreich?

Lösung

Verwenden Sie die Eigenschaft einer Logik, dass möglicherweise gekapselt werden innerhalb der setter und Getter sollte gelten, auch innerhalb der Klasse selbst.Wenn es keine Logik innerhalb der Getter und setter ist es noch nicht sicher ist, zu verwenden, die Felder selbst, denn wenn Sie zu einem beliebigen Zeitpunkt hinzufügen möchten Logik, um den Zugang zu diesen Felder müssen Sie umgestalten, viel mehr.

Andere Tipps

Ich glaube, dass sollten Sie auf die Eigenschaft als allgemein üblich.Während in diesem Beispiel geht es wirklich nicht viel von einem Unterschied, der get/set-Accessoren bieten die Fähigkeit zu tun, ein bisschen mehr Arbeit, als packte eine Eigenschaft.Zum Beispiel, viele unserer Eigenschaft "get" Accessoren durchführen lookup innerhalb einer komplexeren Datenstruktur oder Standardwerte festlegen, wenn nichts definiert wurde.So dass der rest der Klasse können die Vorteile dieser Logik, wir machen eine Gewohnheit, mit die Eigenschaften.Nur so haben wir nicht zu denken, zu hart über Sie, versuchen wir die Verallgemeinerung der Praxis.

Es kann Situationen geben, in denen wir möchten, direkt auf die zugrunde liegenden Daten-Mitglied, aber dann ist das eine bewusste Entscheidung, mit einem bestimmten Grund, und es neigt dazu, die Ausnahme.

Ich bevorzuge Eigenschaften, da Sie leicht zu handhaben nur-lese-Situationen, und es ist leicht zu wickeln, Sie mit einer basic-Validierung, die Sie vielleicht brauchen, zu tun.

Wenn ich einfach wieder den Wert der internen variable, habe ich die variable öffentlich - dort ist kein Schaden zu tun so.Ich habe immer von Öffentlichen Eigenschaften, wenn ich etwas machen möchte, in Reaktion auf einen Leser oder eine Veränderung der Wert - ie, schreiben Sie in einer Datenbank, was andere auch (wie im zweiten Teil von Ihr Beispiel).

Die Frage, die Sie haben, um zu Fragen, ob Sie was passiert im Klasse zum auslösen dieser Ereignisse.Wenn Sie tun, die gleiche Weise ein externer Anrufer, dann auf die Werte über die Eigenschaft.Wenn Sie nur Lesen möchten, den Wert der internen variable.

Um deine Frage zu beantworten, gibt es keinen Schaden, es zu tun oder so - nur die Betrachtung der möglichen Nebenwirkungen.

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