Eigenschaften von vs-Methoden
Kurze Frage: Wenn Sie sich entscheiden, verwenden Sie die Eigenschaften (C#) und wenn Sie sich entscheiden, mit Methoden?
Sind wir damit beschäftigt, diese Debatte und haben einige Bereiche, wo es ist fraglich, ob wir verwenden sollten, eine Eigenschaft oder eine Methode. Ein Beispiel ist dies:
public void SetLabel(string text)
{
Label.Text = text;
}
Im Beispiel Label
ist ein Steuerelement in einer ASPX-Seite. Gibt es ein Prinzip, das Regeln die Entscheidung (in diesem Fall), ob dies eine Methode oder eine Eigenschaft.
Ich werde die Antwort akzeptieren, die die meisten Allgemeine und umfassende, aber das berührt auch das Beispiel, das ich gegeben habe.
-1 diese Frage wurde gestellt und beantwortet vor: stackoverflow.com/questions/164527/...
Die Methode/Feld/Eigenschaft vor-und Nachteile erzeugen kann, die lange Debatten; einige Allgemeine Nutzung für Eigenschaften: wenn Sie wollen private/proteted Felder, aber zur gleichen Zeit, die Sie verfügbar machen möchten. Eine andere Verwendung ist nicht nur Anweisungen, sondern auch Ausdrücke (Aktionen, wenn Sie möchten) auch
Die Methode/Feld/Eigenschaft vor-und Nachteile erzeugen kann, die lange Debatten; einige Allgemeine Nutzung für Eigenschaften: wenn Sie wollen private/proteted Felder, aber zur gleichen Zeit, die Sie verfügbar machen möchten. Eine andere Verwendung ist nicht nur Anweisungen, sondern auch Ausdrücke (Aktionen, wenn Sie möchten) auch
if()
überprüft (laut MSDN). Aber dies ist schwierig, da der Benutzer nicht immer bewusst, Verarbeitung Kosten hinter dem Zugriff auf eine variable (Eigenschaft) (d.h. der code ist nicht verfügbar) und für strenge Gründen müsste man die benchmark-Eigenschaft. Oh, und ein "bonus" kann man nicht verwenden, Zeiger mit Eigenschaften.InformationsquelleAutor Trumpi | 2009-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Die Wahl Zwischen Eigenschaften und Methoden Abschnitt von Design-Richtlinien für die Entwicklung von Klassenbibliotheken:
Mystere Mann Farbe zu ändern, ist die gewünschte Wirkung, keine Nebenwirkung. Nebeneffekt ist, dass etwas ist nicht vorgesehen in der primären Handlung.
Mann: definelty ändern der Farbe ist nicht ein Nebeneffekt, ich Stimme völlig mit dieser Antwort
"Weil weniger erfahrene Entwickler finden, die Eigenschaften einfacher zu verwenden." - Wie ich es sehe ist dies der einzige Grund für das aussetzen Eigenschaften. Aber bin ich im Recht?
Was ist der Unterschied in der internen Implementierung einer Immobilie gegen eine Methode. Etwas schob sich in den call-stack wenn eine Eigenschaft wird verwendet? Wenn nicht, wie sonst wird es gehandhabt?
InformationsquelleAutor Ken Browning
Ja, wenn alles, was Sie tun, ist zu bekommen und zu Einstellung, Nutzung einer Immobilie.
Wenn du etwas tust Komplex beeinflussen können, dass mehrere Mitglieder-Daten, ist eine Methode besser geeignet. Oder wenn Ihr die get-Parameter oder Ihre setter braucht mehr als einen Wert-parameter.
In der Mitte befindet sich eine graue Fläche, wo die Linie ist ein wenig unscharf. Es gibt keine harte und schnelle Regel, und verschiedene Menschen werden manchmal nicht einig, ob etwas eine Eigenschaft oder eine Methode. Das wichtigste ist, nur um (relativ) konsistent mit wie Sie tun es (oder, wie Ihr team funktioniert).
Sind Sie weitgehend austauschbar, aber eine Eigenschaft, Signale an den Benutzer, dass die Implementierung ist relativ "einfach". Ach ja, und die syntax ist ein wenig sauberer.
Generell, meine Philosophie ist, dass, wenn Sie zu schreiben beginnen, den Namen einer Methode, die beginnt mit get oder set und null oder einem parameter (bzw.), dann ist es ein heißer Kandidat für eine Eigenschaft.
Der erste Satz erklärt alles. Bravo.
InformationsquelleAutor cletus
Wenn Sie die Einstellung auf eine tatsächliche Eigenschaft des Objekts verwenden Sie dann eine Eigenschaft aus.
Wenn Sie der Durchführung einer Aufgabe /Funktionalität verwenden Sie dann eine Methode.
In deinem Beispiel, es ist, eine bestimmte Eigenschaft gesetzt wird.
Wenn aber, Ihre Funktionalität war AppendToLabel dann würden Sie eine Methode verwenden.
InformationsquelleAutor Robin Day
Eigenschaften sind ein Weg, um zu injizieren, oder abrufen von Daten aus einem Objekt. Sie erzeugen eine Abstraktion, die über Variablen oder Daten in einer Klasse. Sie sind Analog zu get-und Set-Methoden in Java.
Methoden Kapseln eine operation.
Im Allgemeinen verwende ich die Eigenschaften zum setzen einzelner bits von Daten, oder kleine Berechnungen auf eine Klasse, wie die Umsatzsteuer. Das ist abgeleitet aus der Anzahl der Elemente und deren Kosten in einem Warenkorb.
Verwende ich Methoden, wenn ich erstellen Sie eine operation, wie das abrufen von Daten aus der Datenbank. Jede operation, die hat bewegliche Teile, ist ein Kandidat für eine Methode.
In deinem code-Beispiel würde ich wickeln Sie es in eine Immobilie, ob ich zugreifen zu können, müssen Sie es außerhalb es halt Klasse:
Einstellung der text:
Wenn ich nur die Einstellung der Text-Eigenschaft des Label-dies ist, wie ich es tun würde:
Einstellung der text:
InformationsquelleAutor Chuck Conway
Suche über MSDN, fand ich einen Hinweis auf Eigenschaften von vs-Methoden , bietet einige große Richtlinien für das erstellen von Methoden:
Ich bin damit einverstanden, dass dies Sinn macht, wo immer anwendbar. Aber sehe ich es richtig, dass anhand von Eigenschaften über XAML Datenbindung in WPF lässt keine andere Wahl, als das zu tun, die entsprechenden Maßnahmen in den setter? (vor allem auf einer neuen SelectedItem für ComboBoxes, ListBoxes, etc..)
InformationsquelleAutor Gavin Miller
Müssen Sie nur einen Blick auf den Namen... "Eigentum". Was bedeutet es? Das Wörterbuch definiert es in vielerlei Hinsicht, aber in diesem Fall "einen wesentlichen oder markanten Attribut oder Qualität einer Sache" am besten passt.
Denken Sie über den Zweck der Aktion. Sind Sie in der Tat, verändern oder abrufen "einen wesentlichen oder markanten Attribut"? In deinem Beispiel werden Sie eine Funktion verwenden, um eine Eigenschaft einer textbox. Das scheint irgendwie albern, nicht wahr?
Eigenschaften sind wirklich Funktionen. Sie alle kompilieren nach unten zu getXXX() und setXXX(). Es nur versteckt Sie in syntaktischer Zucker, aber es ist Zucker, der eine semantische Bedeutung, um den Prozess.
Denken Sie über Eigenschaften wie Attribute. Ein Auto hat viele Attribute. Farbe, MPG, Modell, etc.. Nicht alle Eigenschaften sind einstellbare, einige sind calculatable.
Inzwischen eine Methode ist eine Aktion. GetColor sollte eine Eigenschaft sein. GetFile () - sollte eine Funktion sein. Eine weitere Faustregel ist, wenn es ändert nicht den Zustand des Objekts ist, dann sollte es eine Funktion sein. Zum Beispiel, CalculatePiToNthDigit(n) sollte eine Funktion sein, weil es nicht tatsächlich ändern den Zustand des Math-Objekts angefügt.
Dies ist vielleicht Wandern ein wenig, aber es ist wirklich darauf an, zu entscheiden, was Ihre Objekte sind, und was Sie darstellen. Wenn Sie nicht herausfinden können, wenn sich eine Eigenschaft oder Funktion, vielleicht spielt es keine Rolle, welche.
InformationsquelleAutor Erik Funkenbusch
Symantically Eigenschaften sind Attribute Ihrer Objekte.
Methoden werden Verhaltensweisen von Ihrem Objekt.
Label ist ein Attribut und es macht mehr Sinn zu machen, eine Eigenschaft.
In Bezug auf die objektorientierte Programmierung Sie sollten ein klares Verständnis von dem, was Teil des Verhaltens und was ist lediglich ein Attribut.
Auto { Farbe, Modell, Marke }
Einem Auto hat die Farbe, Modell und Marke im Internet daher ist es nicht sinnvoll, eine Methode SetColor oder SetModel weil symantically wir nicht zu Fragen Wagen, um seine eigene Farbe.
Also, wenn Sie anzeigen der Eigenschaft/Methode Fall der real-life-Objekt, oder schauen Sie es von symantic Sicht, Ihre Verwirrung nicht wirklich Weg.
InformationsquelleAutor Muhammad Hasan Khan
Ich bevorzuge die Eigenschaften für add/set-Methoden mit 1 parameter. Wenn Parameter mehr sind, verwenden Sie Methoden.
InformationsquelleAutor abatishchev
Eigenschaften nur einfache set-und get-one-Liner. Nichts mehr und sollte es wirklich verschoben werden, um eine Methode. Komplexen code sollte immer sein, die in Methoden.
InformationsquelleAutor Duke of Muppets
Ich nur verwenden Sie die Eigenschaften für die Variablen Zugriff, d.h. abrufen und festlegen der einzelnen Variablen, oder das abrufen und setzen von Daten in Steuerelementen. So bald, wie jede Art der Datenbearbeitung ist notwendig/durchgeführt habe, verwende ich Methoden.
InformationsquelleAutor Marcus L
Auch ein großes plus für die Eigenschaften ist, dass der Wert der Immobilie kann man in Visual Studio beim Debuggen.
InformationsquelleAutor David Karlaš
Eigenschaften sind wirklich nett, weil Sie zugänglich sind, in der visual designer von visual studio, sofern Sie Zugriff haben.
Verwenden Sie verwendet werden, wurden Sie lediglich festlegen und abrufen und vielleicht einige der Validierung, der nicht auf eine erhebliche Menge an code. Seien Sie vorsichtig, da das erstellen von komplexen Objekten bei der Validierung ist nicht einfach.
Alles andere Methoden sind der bevorzugte Weg.
Es geht nicht nur um Semantik. Mit Eigenschaften unangemessenes beginnen mit Verrücktheit auftreten in der visual studio-visual designer.
Zum Beispiel war ich immer ein Konfigurations-Wert in eine Eigenschaft einer Klasse. Die configuration-Klasse tatsächlich eine Datei öffnet und führt eine sql-Abfrage, um den Wert der Konfiguration. Das verursachte Probleme in meiner Anwendung, wo die Konfigurations-Datei geöffnet und gesperrt von visual studio selbst, anstatt meine Anwendung ist, da war nicht nur das Lesen, sondern das schreiben der Konfigurations-Wert (über die setter-Methode). Um dies zu beheben musste ich einfach ändern, um eine Methode.
InformationsquelleAutor Jeremy Edwards
Als eine Angelegenheit von design-Eigenschaften repräsentieren Daten oder Attribute der Klasse Objekt, Während Methoden sind Handlungen oder Verhaltensweisen, die von der Klasse Objekt.
In .Net-Welt gibt es andere Auswirkungen der Verwendung Eigenschaften:
Missverständnisse (IMHO) über Eigenschaften, Nutzung:
In diesem Beispiel hier könnte es geschrieben worden sein, mit mehr business Bedeutung:
InformationsquelleAutor NileshChauhan
Hier ist ein guter Satz von Richtlinien, wenn Sie mit den Eigenschaften von vs-Methoden aus Bill Wagner
Die Getter sollten einfach und deshalb kaum Ausnahmen. Beachten Sie, dass dies impliziert keine Netzwerk - (oder Datenbank) zuzugreifen. Entweder fehlschlagen könnte, und daher würde eine exception werfen.
Wiederholte Aufrufe der setter (mit den gleichen Wert) soll-Ertrag kein Unterschied zu einem Aufruf.
Get sollte nicht wieder einen Verweis auf interne Datenstrukturen (Siehe Punkt 23). Eine Methode zurückkehren könnte, eine Tiefe Kopie, und könnte dieses Problem vermeiden.
*Aus meiner Antwort auf eine doppelte Frage.
Ich weiß, ich bin ein wenig spät zur party, aber das downvote wahrscheinlich kam wegen der Tatsache, dass Sie Kopie-aufgeklebt Ihre Antwort. Durch kopieren und einfügen, Sie räumte ein, dass diese Frage war im Grunde ein Duplikat der anderen. Als solche, sollten Sie gekennzeichnet als eine doppelte, statt Sie zu beantworten. Ich empfehlen, sich auf ein Artikel auf Meta, wie mit doppelten Fragen behandelt werden sollen.
InformationsquelleAutor Chris Ballance
Das ist ganz einfach.
1: - Eigenschaft verwenden, wenn Sie möchten, dass Ihre Daten sollten validiert werden, bevor die Speicherung in Feld. So in dieser Art, Eigenschaft ermöglicht die Kapselung für Ihre Felder. Denn wenn Sie den öffentlichen Bereichen end-user zuordnen kann ein beliebiger Wert, die möglicherweise oder möglicherweise nicht gültig, wie pro Ihre geschäftlichen Anforderungen wie Alter sollte mehr als 18. So, bevor der Wert abgelegt wird entsprechende Feld, das wir benötigen, um Ihre Gültigkeit zu überprüfen. Auf diese Weise Eigenschaften repräsentieren Daten.
2: Verwenden Sie Methode, wenn Sie eine bestimmte Aktion ausführen, wie Sie sind, liefert einige Daten wie parameter und Ihre Methode machen einige Verarbeitung auf der basis von gelieferten Werte und Rückkehr verarbeitet-Wert als Ausgabe. Oder Sie wollen, um den Wert zu ändern einiger Felder dieser Berechnung. "Auf diese Weise Methode stellt die Aktion dar".
InformationsquelleAutor Saurabh Mishra
Komme ich aus java eine ich eingesetzt bekommen.. set.. Methode für eine Weile.
Wenn ich code Schreibe, Frage ich nicht um meiner selbst: "Zugriff auf diese Daten ist einfach, oder Sie benötigen ein schwerer Prozess?" , weil sich die Dinge ändern können (heute ermittelt werden, ist diese Eigenschaft einfach, tomonrow, kann einige oder heavy-Prozess).
Heute habe ich eine Methode SetAge(int age) tomonrow habe ich auch die Methode SetAge(date birthdate) , berechnen des Alters mit dem Geburtsdatum.
War ich sehr enttäuscht, dass der compiler transform-Eigenschaft über get-und set-aber beachten nicht mein Get... und Set-Methoden...
InformationsquelleAutor Marco Staffoli