it-swarm.com.de

C # -Codierungsstandards für private Membervariablen

Ich habe zwei gängige Ansätze zur Kodierung von Standards für private Membervariablen gesehen:

class Foo
{
    private int _i;
    private string _id;     
}

und 

class Foo
{
    private int m_i;
    private string m_id; 
}

Ich glaube, dass letzteres von C++ kommt. Außerdem geben viele Personen den Typ vor der Membervariablen an (z. B. double m_dVal), um anzuzeigen, dass es sich um eine nicht konstante Membervariable des Typs double?

Was sind die Konventionen in C #?

28
Sasha

Abgesehen von den beiden, die Sie erwähnen, ist es in C # üblich, kein Präfix für private Mitglieder zu haben. 

class Foo
{
    private int i;
    private string id; 
}

Das ist, was ich verwende, und auch was in den internen Benennungsrichtlinien von Microsoft empfohlen wird.

61
driis

Wie von Brad Abrams angemerkt: interne Kodierungsrichtlinien :

Verwenden Sie kein Präfix für Member Variablen (_, m_, s_ usw.). Wenn du Ich möchte zwischen local und .__ unterscheiden. Member-Variablen, die Sie verwenden sollten "this." in C # und "Me." in VB.NET.

14
Mehrdad Afshari

Ich denke, das wichtigste Prinzip ist, dass Sie konsequent sind. Verwenden Sie das Präfix "_" oder "m", wenn Sie dies gerne tun und mit dem restlichen Code, mit dem Sie arbeiten, übereinstimmen. Was auch immer Sie wählen, bleiben Sie dabei und bleiben Sie konsequent.

11

Ich ziehe es vor, Ihr erstes Beispiel oder Auto-Eigenschaften wie diese zu verwenden, sodass die privaten Felder in Ihrer Klasse nicht definiert werden:

public String MyString { get; set; }

Verwenden Sie den prop-Ausschnitt, um diese WIRKLICH schnell zu machen.

10
Daniel Schaffer

Ich erinnere mich an das Lesen von Framework Design Guidelines , es gibt wirklich keine Konvention für private Member-Variablen, außer dass man die ungarische Schreibweise nicht verwenden sollte und man den ersten Buchstaben des Variablennamens nicht groß schreiben sollte (Camel-Gehäuse verwenden). . Es gibt Zitate in dem Buch, die beide Beispiele unterstützen und überhaupt kein Präfix verwenden. 

Ich persönlich bevorzuge das Präfix "m_".

7
AJ.

Allgemeine Hinweise von Microsoft hier:

http://msdn.Microsoft.com/de-de/library/ms229002.aspx

Automatische Eigenschaften in C # sind großartig und ich verwende sie dann, wenn ich kann, aber es gibt Fälle, in denen sie für mich nicht funktionieren, z.

Im Allgemeinen: Verwenden Sie Kamelhülle und setzen Sie Ihrem Namen keinen vorangestellten Wert wie Unterstrich oder ein Typpräfix.

public int Age {get; set;}

oder

private int age;
public int Age
{
    get { return age; }
    set
    {
        if(value < 0)
            throw new InvalidOperationException("Age > 0");
        age = value;
    }
}
6
andleer

Ich persönlich habe immer Ihr erstes Beispiel verwendet:

    public class Foo
    {
        private int _i;
        private string _id;
    }

Tatsächlich verwendet dies mein gesamtes Team. Außerdem ist der von Ihnen erwähnte m_dVal als ungarische Notation bekannt, hier ist der Wikipedia-Eintrag . Die ungarische Notation ist eigentlich gegen die Kodierungsstandards unserer Teams, daher verwende ich sie niemals.

5

Am besten verwenden Sie, was bereits im Projekt verwendet wird. Wenn Sie ein neues Projekt beginnen, verwenden Sie das, was im Unternehmen am häufigsten verwendet wird.

4
ibz

Ich bevorzuge Unterstriche als Präfix für private Nicht-Konstante-Felder. Warum? Gründe: 1. Einfach auf die Variable schauend kann ich zwischen Feld und lokaler/Parametervariable unterscheiden. Mit "this". für alle Felder ist keine Option - es ist länger .. 2. Zwischen Parameter und Feld besteht Unklarheit:

class Foo
{
  private int id;
  public Foo(int id)
  {
    id = id; //Will compile and work fine. But field will not be initialized.
  }
}
3
Aleksei

Ich neige dazu, mit der ersten Konvention zu gehen, ein einfacher Unterstrich. Ich gebe den Typ auch nicht im Namen an, weil Intellisense mir sagt, was es ist (ich weiß, es kann eine Krücke sein).

Am besten erkundigen Sie sich bei Ihren Kollegen oder Projektkollegen und entscheiden Sie sich für eine Tagung, einige davon sind willkürlich.

1
Jon Dewees

Ich ziehe es vor, überhaupt kein Präfix für Mitgliedsvariablen zu verwenden. Für diejenigen, die außerhalb der Methode deklariert wurden, verwende ich "this.memberVariableName", um sie von denen zu unterscheiden, die innerhalb der Methode deklariert wurden.

1
cyclo

In C++ - Bezeichnern, die mit _ beginnen, gelten sie als schlechte Praxis, sie sollten für den internen Gebrauch reserviert werden. Ich denke, aus diesem Grund wird das Präfixieren eines Variablennamens mit _ manchmal auch als schlechte Praxis in C # betrachtet ... obwohl es keinen Grund gibt, warum Sie es nicht tun können, da alle .NET-Interna im Gegensatz zu C/C++ ordnungsgemäß gekapselt sind Standardbibliotheken.

0
jheriko