none
Unterstrich bei privaten Feldern einer Klasse?

    Frage

  • Hi,

    verwendet ihr eigentlich einen führenden Unterstrich bei der Benennung von privaten Feldern einer Klasse. Ich finde das eigentlich nützlich, um sofort zu erkennen, ob es sich um eine lokale Variable der Methode, oder um ein privates Feld der Klasse handelt. Aber Microsoft erwähnt diese Art der Benennung nicht in seinen Benennungskonventionen.

    LG;-)

    Sonntag, 25. August 2013 16:40

Antworten

  • Hallo,

    Der C#-Compiler lässt Unterstriche im Namen natürlich zu, sonst stände es hier auch nicht zu Debatte.
    Trotztdem soll man es laut Microsoft nicht machen. Es gibt dazu auch einen Codeanalyse Satz:
    http://msdn.microsoft.com/de-de/library/ms182245.aspx

    Mir persönlich gefällt es aber auch am besten private Felder/Eigenschaft mit einem Unterstrich zu beginnen. Bei Klassen, auf die man nicht zugreifen soll genauso (von außerhalb).

    Wenn ich also nicht an irgendwelche Vorgaben gebunden bin, dann benenne ich meine Member auch mit führenden Unterstrichen im Namen.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert free.runn3r Sonntag, 25. August 2013 19:58
    Sonntag, 25. August 2013 16:50
  • Unter C# mag das erstmal recht sinnfrei wirken. Sobald man aber an die anderen .NET Sprachen denkt, dann wird das Logisch, denn VB.NET unterscheidet nicht zwischen Groß- und Kleinschreibung. Der Compiler würde den folgenden Code sofort als Fehlerhaft markieren:

        Dim test As String = "Test"
        Public Property Test As String ' Hier der Fehler: 'Test' is already declared as 'Private test As String' in this class.
            Get
                Return Me.test
            End Get
            Set(value As String)
                Me.test = value
            End Set
        End Property

    Solange nicht Feld und Eigenschaft öffentlich sind, kann VB natürlich ahand der Zugriffsmodifizierer unterscheiden. Darum wüsste ich jetzt auch nicht, warum man es in C# nicht so machen soll. Soweit die Erklärung dazu.

    Aber es geht noch weiter. Viele schreiben auch gerne ein m vor den Namen (Oft in VB gesehen). Das widerspricht sich nun wieder mit der Tatsache, das man keine Präfixe benutzen soll.
    Also eine recht schwierige Angelegenheit um es allen recht zu machen.

    Wenn man sowieso nur eine Eigenschaft braucht um ein Feld zuzuweisen bzw. abzufragen, dann kann man auch die Kurzschreibweise nehmen:

    public string Property { get; set; }

    Ansonsten unterscheidet sich der Feldname vielleicht auch vom Eigenschaftennamen.

    Also Präfix oder Unterstrich oder Vollkommen anderer Name. Irgendwie ist das alles nicht so wirklich konform und einfach anzuwenden.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert free.runn3r Sonntag, 25. August 2013 19:58
    Sonntag, 25. August 2013 18:29

Alle Antworten

  • Hallo,

    Der C#-Compiler lässt Unterstriche im Namen natürlich zu, sonst stände es hier auch nicht zu Debatte.
    Trotztdem soll man es laut Microsoft nicht machen. Es gibt dazu auch einen Codeanalyse Satz:
    http://msdn.microsoft.com/de-de/library/ms182245.aspx

    Mir persönlich gefällt es aber auch am besten private Felder/Eigenschaft mit einem Unterstrich zu beginnen. Bei Klassen, auf die man nicht zugreifen soll genauso (von außerhalb).

    Wenn ich also nicht an irgendwelche Vorgaben gebunden bin, dann benenne ich meine Member auch mit führenden Unterstrichen im Namen.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert free.runn3r Sonntag, 25. August 2013 19:58
    Sonntag, 25. August 2013 16:50
  • Vielen Dank für deine Antwort.

    durch deinen Link bin ich hierauf gestoßen: http://msdn.microsoft.com/de-de/library/ms182242.aspx. Das verbietet ja dann folgenden Aufbau (Microsoft Besipiel für das Verwenden von Eigenschaften):

    public class Date
    {
        private int month = 7;  // Backing store
    
        public int Month
        {
            get
            {
                return month;
            }
            set
            {
                if ((value > 0) && (value < 13))
                {
                    month = value;
                }
            }
        }
    }

    In meinen Klassen verwende ich, wie in diesem Codeauschnitt, für Eigenschaft und zugehöriges privates Feld den gleichen Bezeichner. Ist das jetzt verboten;-) ?

    LG;-)

    Sonntag, 25. August 2013 17:38
  • Unter C# mag das erstmal recht sinnfrei wirken. Sobald man aber an die anderen .NET Sprachen denkt, dann wird das Logisch, denn VB.NET unterscheidet nicht zwischen Groß- und Kleinschreibung. Der Compiler würde den folgenden Code sofort als Fehlerhaft markieren:

        Dim test As String = "Test"
        Public Property Test As String ' Hier der Fehler: 'Test' is already declared as 'Private test As String' in this class.
            Get
                Return Me.test
            End Get
            Set(value As String)
                Me.test = value
            End Set
        End Property

    Solange nicht Feld und Eigenschaft öffentlich sind, kann VB natürlich ahand der Zugriffsmodifizierer unterscheiden. Darum wüsste ich jetzt auch nicht, warum man es in C# nicht so machen soll. Soweit die Erklärung dazu.

    Aber es geht noch weiter. Viele schreiben auch gerne ein m vor den Namen (Oft in VB gesehen). Das widerspricht sich nun wieder mit der Tatsache, das man keine Präfixe benutzen soll.
    Also eine recht schwierige Angelegenheit um es allen recht zu machen.

    Wenn man sowieso nur eine Eigenschaft braucht um ein Feld zuzuweisen bzw. abzufragen, dann kann man auch die Kurzschreibweise nehmen:

    public string Property { get; set; }

    Ansonsten unterscheidet sich der Feldname vielleicht auch vom Eigenschaftennamen.

    Also Präfix oder Unterstrich oder Vollkommen anderer Name. Irgendwie ist das alles nicht so wirklich konform und einfach anzuwenden.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert free.runn3r Sonntag, 25. August 2013 19:58
    Sonntag, 25. August 2013 18:29
  • Hmmmm;-)

    das Interessante am Entwickeln ist ja, dass man Probleme auf verschiede Art lösen kann und der Kreativität fast keine Grenzen gesetzt sind, aber trotzdem möchte ich bestimmte Konventionen einhalten um den Code übersichtlich und nachvollziebar zu halten, nur bräuchte man dafür eben eindeutige Konventionen.

    Vielen Dank und LG;-)

    Sonntag, 25. August 2013 19:13
  • Ich schreibe Methoden-Variablen immer klein und ohne Unterstrich.
    Unterscheiden kann ich Methoden-Variablen und private Klassenvariablen an einem this vor einer Klassenvariablen.

    Das ist auch die von StyleCop empfohlene Syntax.


    Andreas Richter
    Softwareentwickler
    http://www.anrichter.net

    Montag, 26. August 2013 18:27