2009-04-13 16 views
4

Ich war ein Buch zu lesen C# Yellow Book von Rob Miles aufgerufen, wenn ich auf dieser Aussage komme:Sollte ich Eigenschaften in meinen C# -Programmen verwenden oder sollte ich get/set-Accessoren verwenden?

Programmierer Liebes neues glänzendes Spielzeug. Sie sind sehr daran interessiert, Sprachfeatures zu nutzen, um anzugeben. Eigenschaften können ein bisschen so sein. Bei der Betrachtung von Eigenschaften im Gegensatz zu Get und Set-Methoden bin ich eher ein Fan der altmodischen Get-and-Set-Methoden, weil Sie wissen, wo Sie mit diesen sind. Auf der anderen Seite kann ich sehen, wo Eigenschaften das Leben erleichtern könnten, wenn sie richtig verwendet werden.

Ich bin nicht wirklich sicher, was er damit meint. Was schlägst du vor? Was schlägt MS vor?

+1

Duplizieren http://StackOverflow.com/Questions/601621/Properties-VS-Methods/601649 – cletus

+0

Etwas zu Eigenschaften in .NET zu beachten, verursacht nicht den Leistungsaufwand, den sie in Java tun. – Soviut

+1

@Soviut: Sie meinen diese nicht vorhandenen Java-Eigenschaften? – cletus

Antwort

18

ich glaube, Sie ein wenig nicht-Programmierung Beratung

Wenn in Rom in Betracht ziehen sollten, wie die Römer tun.

.NET verfügt über Eigenschaften, die in allen Bibliotheken, Designern und Codegeneratoren enthalten sind. Es ist fast ein untrennbarer Teil der Plattform. Wenn Sie sich dafür entscheiden, get/set-Zugriffsmethoden anstelle von normalen Eigenschaften zu verwenden, erstellen Sie eine Bibliothek, die ein völlig anderes Aussehen hat als jeder andere Programmierer erwartet.

Die Verwendung von get/set Accessoren erhöht nur die Wahrscheinlichkeit, dass Sie Code erstellen, der mit verschiedenen Tools nicht kompatibel ist. Zum Beispiel gibt es viele Tools, die spezielle Falleigenschaften und Felder enthalten und spezielle Funktionen für sie bereitstellen. Sie haben ein äquivalentes Konstrukt, aber keine Werkzeugunterstützung.

+0

"Die Verwendung von get/set-Zugriffsmethoden erhöht nur die Wahrscheinlichkeit, dass Sie Code erstellen, der mit verschiedenen Tools nicht kompatibel ist." In der Tat und für eine sehr weite Definition von "Werkzeugen"! Denken Sie an Datenbindung in WinForms/ASP.NET/WPF, zum Beispiel ... –

0

Ich liebe Eigenschaften. In den "Design Guidelines for Class Libraries" empfehlen sie die Verwendung von Eigenschaften (insbesondere für Zustände, die unabhängig von anderen Zuständen sind).

0

Der beste Weg, darüber nachzudenken, ist, Vergleiche mit realen Objekten zu ziehen. Lassen Sie uns sagen, Sie sind eine Person im wirklichen Leben muss entworfen werden. Wie würden Sie einige Ihrer Attribute in Bezug auf Haarfarbe, Größe und Breite usw. nennen? Sobald Sie anfangen, über diese Zeilen nachzudenken, wird es hilfreicher sein, da jeder seine eigene Art zu denken hat.

5

Ich weiß nicht, wer Rob Miles ist, aber wenn Ihr Zitat korrekt ist, dann habe ich schon Respekt vor ihm verloren.

Alles in .NET verwendet Eigenschaften. Wenn Ihr Code keine Eigenschaften verwendet, handelt es sich um den einzigen Codeabschnitt, der dies nicht tut.

+4

Wenn ich raten musste, kommt das Zitat aus einem Buch, das bei oder vor der Veröffentlichung von 1.0 geschrieben wurde (dh vor 7+ Jahren). Wenn Sie damals ein eingefleischter Java-Programmierer wären, wäre das verständlicher gewesen. –

0

Wenn Sie Eigenschaften nicht verwenden, verlieren Sie ein sehr prominentes Feature, das ich in .NET: Binding als äußerst nützlich erachte. Sie können nur an/von Eigenschaften in .NET binden. Wenn Sie also get/set-Zugriffsmethoden verwenden, spielen Sie nicht gut mit anderen.

2
myObject.Property++; 

VERSUS:

myObject.SetProperty(myObject.GetProperty() + 1); 

Ja ..

Explicit Get-/Set-Verfahren verwendet werden soll, wenn nicht-triviale Berechnung/Verarbeitung durchgeführt wird, so, wo eine tatsächliche Aktion durchgeführt wird.

8

Ich schrieb diesen Teil des Buches als Java-Programmierer, der vor ein paar Jahren zu C# wechselte. Ich denke, ich werde den Text in der nächsten Version noch einmal durchsehen und es etwas klarer machen.

Wenn Sie sicherstellen möchten, dass der Benutzer Ihrer Klasse weiß, dass ein bestimmter Code ausgeführt wird, wenn er ein Objekt verwendet, macht das Einfügen in eine Methode dies explizit. Außerdem können Sie mithilfe von Methoden Fehlerbedingungen zurückgeben, ohne dass Ausnahmen ausgelöst werden müssen. Es gibt keinen Performance-Treffer, da der Compiler sowieso Eigenschaften in Methoden konvertiert.

Ich verwende Eigenschaften im Code, den ich schreibe, besonders für Dinge wie Staat. Ich habe mich nie wirklich dafür ausgesprochen, keine Eigenschaften zu verwenden, sondern dafür zu sorgen, dass Sie das Richtige in der richtigen Situation verwenden.

+0

Wow der Autor selbst. Willkommen bei Stackoverflow ;-) – Kredns

+0

Jonathans Kommentar in John Saunders Antwort traf wirklich den Nagel auf den Kopf. – Kredns

+0

Es ist eine gute Sache, zu wissen, wann man Eigenschaften verwenden und Methoden anwenden sollte. Tatsächlich macht es Microsoft ziemlich klar, wann man welche verwenden sollte. Es sah jedoch so aus, als würden Sie sich dafür einsetzen, get/set-Methoden anstelle von Eigenschaften zu verwenden, was in C# einfach pervers wäre - vielleicht ist eine Klärung erforderlich, wenn das nicht Ihre Absicht war? –

Verwandte Themen