2016-08-31 3 views
-2

Ich versuche, meinen Code für maximale Lesbarkeit zu optimieren und dafür brauche ich meinen Code durch und durch in-line. Ich werde zwei Codeschnipsel als Beispiel vorstellen. In meinen Augen ist die untere für die Augen einfacher. Diese Schnipsel (einer von ihnen) würde in einer Klasse gespeichert werden und Einstellung Breite nur innerhalb der Klasse möglich sein sollte, während bekommen Breite sollte immer möglich sein.Was ist der optimale Weg, um einen privaten Wert aus einer Klasse zurückzugeben?

A:

private int width; 
public int Width 
{ 
    get { return width; } 
    private set { } 
} 

B:

private int width; 
public int Width() 
{ 
    return width; 
} 

Soweit ich diese beiden Wege bin besorgt sind das gleiche Endergebnis zu erreichen, identisch. Da ich gerne in allen meinen Kursen inline sein würde, würde ich nicht beide Wege gemischt nutzen wollen. Der B-Ansatz scheint in meinen Augen sauberer zu sein.

Gibt es irgendwelche Nachteile/upsides entweder Ansatz. Sollte ein Ansatz gegenüber dem anderen bevorzugt werden? Sind A- und B-Ansätze wirklich vollständig identisch?

+4

'public int Breite {get; privates Set; } ' – zerkms

+0

Imo würde es keinen Sinn machen, eine Methode aufzurufen (von der erwartet wird, dass sie einige Funktionen ausführt), um einen Wert zu erhalten oder zu setzen, genauso wie es nicht erwartet würde, dass umfangreiche Funktionalität ausgeführt wird, wenn man eine Wert von einer Eigenschaft. Ich denke, dass Ihre ** B ** -Option sauberer ist, aber dies kann einfach auf die Wahl und den Stil des betreffenden Codierers zurückzuführen sein. –

+0

@zerkms Können Sie diesen Kommentar bitte als Antwort posten? –

Antwort

1

Im Allgemeinen empfehlen wir, dass Sie bei der objektorientierten Programmierung Methoden verwenden sollten, um Aktionen auszuführen, die den Status des Objekts beeinflussen können (außer einem einzelnen Attributwert) und Eigenschaften verwenden sollten (Setter und Getter) zum Abrufen oder Festlegen von Objektattributen.

Methodennamen daher sollen (im Allgemeinen) beschreiben, was die Methode macht (die Syntax wie ein Verb sein soll), während sollten Eigenschaftsnamen Substantive (Referenzierung ein Attributs des Objekts) seine

Unter der Oberfläche, natürlich Der .Net-Compiler wandelt alle Property-Getter und Setter in Methoden um (im IL-Code gibt es keine Eigenschaft), aber der oben erläuterte Principal erlaubt es Ihnen, auf einen Blick zu erkennen, ob ein Ausdruck etwas "tut", oder einfach auf ein Attribut zugreifen.

1

nicht sicher, warum alles gründlich in-line zu sein hat, oder warum das macht nichts besser lesbar. Diese

dies scheint die knappste Implementierung in jedem Fall zu sein.

Entfernen Sie den Leerraum, wenn Sie wirklich müssen, aber ich bin mir nicht sicher, ob das wirklich eine Verbesserung ist.

public int Width { get; private set; }

Die MSDN bietet einige Hinweise in dieser Situation:

In den meisten Fällen Eigenschaften repräsentieren Daten und Methoden führen Aktionen. Auf Eigenschaften wird wie Felder zugegriffen, wodurch sie einfacher zu verwenden sind. Ein Verfahren ist ein guter Kandidat eine Eigenschaft zu werden, wenn einer dieser Bedingungen vorhanden ist:

  • hat keine Argumente und gibt die Zustandsinformationen eines Objekts.
  • Akzeptiert ein einzelnes Argument, um einen Teil des Zustands eines Objekts festzulegen.

Eigenschaften sollten sich so verhalten, als wären sie Felder; Wenn die Methode nicht kann, sollte es nicht zu einer Eigenschaft geändert werden. Methoden sind besser als Eigenschaften in den folgenden Situationen:

  • Das Verfahren führt ein zeitaufwendiger Vorgang. Die Methode ist wahrnehmbar langsamer als die Zeit, die benötigt wird, um den Wert eines Feldes zu setzen oder zu erhalten.
  • Die Methode führt eine Konvertierung durch. Der Zugriff auf ein Feld gibt keine konvertierte Version der gespeicherten Daten zurück.
  • Die Get-Methode hat eine beobachtbare Nebenwirkung. Das Abrufen des Werts eines Felds verursacht keine Nebenwirkungen.
  • Die Reihenfolge der Ausführung ist wichtig. Das Festlegen des Werts eines Felds hängt nicht vom Auftreten anderer Operationen ab.
  • Wenn Sie die Methode zweimal hintereinander aufrufen, werden unterschiedliche Ergebnisse erzielt.
  • Die Methode ist statisch, gibt jedoch ein Objekt zurück, das vom Aufrufer geändert werden kann.
  • Wenn Sie den Wert eines Felds abrufen, kann der Aufrufer die vom Feld gespeicherten Daten nicht ändern.
  • Die Methode gibt ein Array zurück.
Verwandte Themen