| 

.NET C# Java Javascript Exception

2
Hallo,
ich habe mal eine Frage bezüglich Naming Conventions, und dort speziell um die Benennung von Klassenvariablen im direkten Zusammenhang mit der Benennung von Properties.

Das man keine "Hungarian Notation" mehr benutzen soll, ist soweit klar ( ich möchte jetzt gar keine Grundsatzdiskussion lostreten, ob man es doch sollte...).

Eigentlich ist durch die MSDN auch alles klar:
Felder sollen nach "camelCase" werden, Properties "PascalCase"
So weit so gut.

Nun habe ich das Problem, dass ich Properties zur Verfügung stelle, die ich, wenn ich könnte, wie die Variablen nennen würde.
Einfaches Beispiel:

Public Class Form1
Private hintergrundFarbe As Color
Public ReadOnly Property HintergrundFarbe As Color
Get
Return Me.hintergrundFarbe
End Get
End Property
End Class

Ähnlich dem zweiten beispiel von MSDN.

Ich krieg aber für mein kleines Anschauuungsbeispiel sowie für das Microsoftbeispiel den Fehler, dass mein Property bereits als private Variable deklariert ist.
Fehler 1 "HintergrundFarbe" ist bereits als "Private hintergrundFarbe As System.Drawing.Color" in class deklariert.

Irgendwie seh ich gerade den Wald vor lauter Bäumen nicht , hab ich das Gefühl.
Kann mir da wer weiterhelfen ? Was ist im Moment "state-of-art"? Wie sollte das einfache Beispiel von mir aussehen, damit es sich an aktuelle Konventionen hält und keinen Fehler mehr schmeißt?
10.05.2011
SpellItRight 180 1 6
3 Antworten
4
VB.NET ist, im Gegensatz zu C#, nicht case-sensitiv. Das von Dir verlinkte Beispiel verwendet deshalb den Suffix "value" für das Feld. Du kannst also Deinen Code fixen, in dem Du das Feld als

Private hintergrundFarbeValue As Color

deklarierst.

UPDATE:
Ab .NET 4 gibt es auch in VB.NET automatisch implemetierte Properties, bei denen Du Dir das Feld sparen kannst, wenn Du im Getter nichts besonderes zu tun hast.

Ansonsten habe ich bei einer kurzen Recherche noch diese Übersicht über .NET-Namenskonventionen gefunden. Macht einen guten Eindruck auf mich. Der Autor bevorzugt für Felder die Konvention mit "_"-Präfix, u.a. zum Vermeiden eben solcher Case-Kollisionen. Er weist auch gleich darauf hin, dass diese Festlegung "controversial" ist ;-). Ich hab aber selber (sogar in C#) gute Erfahrungen damit gemacht - in der Drop-Down-Box aller Member im VS-Editor stehen dadurch alle privaten Felder ganz oben und nicht quer durcheinander mit den Methoden und Properties. Mir gefällt das, andere finden es schrecklich...
10.05.2011
Matthias Hlawatsch 13,2k 4 9
das mit dem Suffix Value entspricht dem 1. Beispiel auf der Seite.
Bei dem zweiten Beispiel( das mit dem Handle ) unterscheiden sich Property und Feld nur durch die Groß/Kleinschreibung des Anfangsbuchstaben:

Public Class Control
Inherits Component
Private handle As Integer

Protected ReadOnly Property Handle() As Integer
Get
Return handle
End Get
End Property
End Class
SpellItRight 10.05.2011
1
Scheinbar ein schlechtes / altes Beispiel von Microsoft. Konnte es auch in keiner Testumgebung annähernd zum Laufen bringen.
Dustin Klein 10.05.2011
Sorry, hatte übersehen (noch im Zug auf meinem kleinen Handy-Display), dass es ein zweites Beispiel gibt und Du explizit darauf verwiesen hattest. Nun, welcome to the real world (of MSDN) - das zweite Beispiel ist in diesem Punkt schlichtweg falsch. Das hat bei Microsoft offenbar niemand getestet.
Matthias Hlawatsch 10.05.2011
+1 Ich mag ebenfalls die Konventionen des _ Präfix und kann sie bisher auch nur empfehlen.
Dustin Klein 10.05.2011
_Variablenname empfehle ich meinen Azubis auch... Codecompletion ist damit wunderbar...

Auch wenn es nicht gern gesehen ist verlange ich auch dass _xVariablenname mit x als Präfix für simple Datentypen... bei allem anderen soll es sprechend sein
Barados 10.05.2011
1
Hi Matthias, zu deinem Update aus deiner vorherigen Antwort:
Auf der Seite war ich auch, hat mir auch weitergeholfen.
Falls es jemanden interessiert, ist hier noch ne Linksammlung zum Thema Naming.

Das mit den vorgeschlagenen Unterstrichen finde ich auch ganz gut.
Was mach daran stört ist, dass es sich so etwas damit beißt, dass (eigentlich) keine Präfixe verwendet werden sollen, und nen Unterstrich würde ich schon wieder als Präfix bezeichnen. Aber damit kann ich leben.

•Do not use Hungarian notation for field names. Good names describe semantics, not type.
•Do not apply a prefix to field names or static field names. Specifically, do not apply a prefix to a field name to distinguish between static and nonstatic fields. For example, applying a g_ or s_ prefix is incorrect.


Selbst bei Microsoft sind sie sich wohl nicht so wirklich einig. Ich hatte schonmal in den VS2010 Samples gesucht, und dort findet man wirklich alles. Ob Hungarian Notation, Unterstriche, Camel Case, alles dabei.

Die Tatsache, dass das Beispiel wirklich nicht (mehr) funktioniert, beruhigt mich.

Vielen Dank !
10.05.2011
SpellItRight 180 1 6
0
Ist jetzt nur eine Vermutung, ich selbst arbeite nicht mit VB.NET, aber fehlt dort bei deinem Property nicht ein Klammerpaar?

Public Class Form1
Private hintergrundFarbe As Color
Public ReadOnly Property HintergrundFarbe() As Color
Get
Return Me.hintergrundFarbe
End Get
End Property
End Class


Es ist zwar ein Property, aber mit einer Getter-Methode, daher müsste da ein Klammerpaar hin.
10.05.2011
Dustin Klein 2,9k 2 9
Auch mit dem Klammerpaar bleibt der Fehler (leider) bestehen
SpellItRight 10.05.2011
Okay, mit Testumgebung gerade mal rumprobiert und komme auch zu dem Ergebnis, dass es unter VB.NET nicht funktioniert. Entweder hat MS hier ein schlechtes Beispiel gewählt, oder es war in den frühen Versionen tatsächlich mal möglich.
Dustin Klein 10.05.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH