2 Stimmen

Klasseninterne Verwendung von öffentlichen Eigenschaften

Nehmen wir an, ich habe eine Klasse, die eine Eigenschaft offenlegt. Ist es ein guter Ansatz, die private "Haltervariable" für die interne Verwendung in der Klasse zu verwenden? Oder sollte ich die Eigenschaft auch für den internen Gebrauch verwenden.

Zur Erklärung, sollte ich verwenden:

public class foo
{
    String _statusHolder;
    public String myStaus
    {
        get { return _statusHolder; }
        set{ _statusHolder = value; }
    }

    public void DisplayMyStatus()
    {
        Console.WriteLine(_statusHolder);
    }
}

Oder:

public class foo
{
    String _statusHolder;
    public String myStaus
    {
        get { return _statusHolder; }
        set{ _statusHolder = value; }
    }

    public void DisplayMyStatus()
    {
        Console.WriteLine(myStaus);
    }
}

Ich könnte mir vorstellen, dass der zweite Ansatz kohärenter und besser lesbar ist. Es wäre auch effektiver, wenn ich später einige Änderungen in der Set-Anweisung vornehmen würde. Aber gibt es irgendwelche Leistungsprobleme oder gilt es aus irgendeinem Grund als schlechte Praxis?


EDITAR:

Es scheint, dass alle dazu tendieren, die Immobilie intern zu nutzen. Mein erster Gedanke war derselbe, aber als unerfahrener Programmierer kann man nie wissen. Vielen Dank an alle für das schnelle Feedback!

3voto

David Wengier Punkte 9835

Leistungsprobleme sollten vernachlässigbar sein, da der JITer oder Compiler problemlos herausfinden wird, dass Ihr Funktionsaufruf (der Getter der Eigenschaft) nichts Aufregendes tut und inlined werden kann.

Der Vorteil ist, dass künftige Änderungen an der Geschäftslogik, die in den Getter eingefügt werden könnten, von Ihrer Klasse automatisch genutzt werden können, ohne dass ein zu großes Refactoring erforderlich ist.

Die Kehrseite der Medaille ist natürlich, dass Sie diese neue Geschäftslogik unter Umständen vermeiden möchten. Es ist also etwas, das je nachdem, wie wahrscheinlich es ist, dass sich a) die Logik ändert und b) diese Logik umgangen werden muss, in Betracht gezogen werden muss.

Ein weiterer (potenzieller) Vorteil der internen Verwendung der Eigenschaft besteht darin, dass Sie leicht zu oder von automatischen Eigenschaften wechseln können.

2voto

Sam Saffron Punkte 124121

Ich neige dazu, mit dem Aufruf der Eigenschaften Ursache gehen, sobald Zeug wird kompliziert Sie in Sperren und Business-Logik in der Getter setzen können

Für C# 3.0 würde ich mit etwas entlang dieser Linien gehen (und nur explizit erstellen das Backing-Feld, wenn seine wirklich benötigt)

public class foo
{

    public String Status
    {
        get;
        set;
    }

    public void DisplayMyStatus()
    {
        Console.WriteLine(Status);
    }
}

2voto

Sebastian Dietz Punkte 5512

Verwenden Sie die Eigenschaft, wenn es eine gibt. Eine Eigenschaft kann Nebeneffekte haben, wie z. B. eine träge Initialisierung, die Sie unabhängig davon haben möchten, von wo aus Sie auf die Variable zugreifen.

Selbst wenn die Eigenschaft jetzt keine Nebeneffekte hat, könnten andere Entwickler sie später hinzufügen, und die Stellen, an denen die "rohe" Variable verwendet wird, können fehleranfällig sein, weil der neue Code nicht aufgerufen wird.

Und schließlich erleichtert die Eigenschaft das Refactoring, zum Beispiel wenn der Wert später nicht mehr in einer Variablen gespeichert ist, sondern innerhalb des Eigenschafts-Accessors berechnet wird oder aus einer anderen Quellvariablen stammt.

1voto

Miserable Variable Punkte 27724

Bei der Programmierung in Java bevorzuge ich die Getter-Methode, weil ich dort einen Haltepunkt setzen und/oder Änderungen in der Protokollierungsausgabe sehen kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X