webentwicklung-frage-antwort-db.com.de

Gibt es eine C # -Namenskonvention für eine in einer Eigenschaft verwendete Variable?

Nehmen wir an, wir haben eine Variable, die wir Fubar nennen wollen.

Nehmen wir an, dass Fubar eine String ist!

Das heißt, wir würden Fubar so definieren:

public string Fubar;

Nehmen wir an, wir möchten, dass Fubar einen Getter und Setter hat (oder mit anderen Worten eine C # -Eigenschaft wird)!

private string Fubar;
public string Fubar_gs
{
    get
    {
        //Some fancy logic
        return Fubar;
    }
    set
    {
        //Some more fancy logic
        Fubar = value;
    }
}

Gut, ok! Das ist alles gut und schön, AUSSER, was wäre, wenn ich wollte, dass das PROPERTY Fubar heißt, nicht die ursprüngliche Variable?

Natürlich würde ich beide Variablen einfach umbenennen. Das Problem ist jedoch, wie lautet der beste Name für die ursprüngliche Variable?

Gibt es eine Namenskonvention für diese Situation?

41

Nach den Namenskonventionen von Microsoft wäre der richtige Weg:

private string fubar;
public string Fubar { get { return fubar; } set { fubar = value; } }

Viele Benutzer ziehen es jedoch vor, das private Feld mit einem Unterstrich zu versehen, um die Möglichkeit der Fehlbesetzung zu minimieren und das Feld zu nutzen, wenn sie die Immobilie nutzen möchten, oder umgekehrt.

Daher ist es üblich zu sehen:

private string _fubar;
public string Fubar { get { return _fubar; } set { _fubar = value; } }

Die Vorgehensweise, die Sie einnehmen, liegt letztlich bei Ihnen. Ersteres wird von StyleCop standardmäßig erzwungen, ReSharper dagegen. 

In C # 6 gibt es eine neue Syntax zum Deklarieren von Standardwerten für Eigenschaften oder zum Erstellen von schreibgeschützten Eigenschaften, wodurch die Notwendigkeit für Eigenschaften mit Hintergrundfeldern verringert wird, die keine spezielle zusätzliche Logik in den Methoden get und set haben. Sie können einfach schreiben:

public string Fubar { get; set; } = "Default Value";

oder 

public string Fubar { get; } = "Read-only Value";

119
Daniel Mann

vor dem privaten mit einem Unterstrich _Fubar

9
Keith Nicholas

Wenn sich im Getter/Setter keine Logik befindet, verwenden Sie eine auto-property:

public string Fubar {get; set;}

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

6
Austin Salonen

Wenn Sie Ihre privaten Variablen mit Kleinbuchstaben benennen, können Sie mit der rechten Maustaste darauf klicken und VS den Getter-/Setter-Code für Sie generieren lassen. 

Refactor-> Enacpsulate Field ...

Die Eigenschaft wird mit Caps benannt.

5
Belmiris

Leider gibt es keine gängige Konvention. Sie müssen wählen, was für Ihren Fall am besten geeignet ist. Ich habe alle folgenden Ansätze in verschiedenen Codebasen gesehen.

Ansatz 1

private string _fubar;   //_camelCase
public string Fubar { ... }

Ansatz 2

private string fubar;    //camelCase
public string Fubar{ ... }

Ansatz 3

private string _Fubar;    //_PascalCase
public string Fubar{ ... }

Es gibt auch Frameworks, die viel Kreativität erfordern, z. B. die Verwendung einer Eigenschaft, und sie als Elementvariable dokumentieren. Auf diese Weise wird das Styling des Mitglieds anstelle des Styling der Eigenschaften verwendet (yeah Unity! Ich zeige mit dem Finger auf Sie und die Eigenschaft/das Mitglied Ihres MonoBehaviour.transform) )

In unserer Codebasis verwenden wir unsere hausgemachte Regel:

  • Versuchen Sie, eine genauere Benennung zu verwenden. Normalerweise hat ein Mitglied, das in einem öffentlichen Gebäude verwendet wird, einen etwas anderen Zweck als sein öffentliches Pendant. Daher ist es meistens möglich, einen anderen und richtigen Namen zu finden, und wenn dies nicht möglich ist, besteht der Zweck darin, nur den Staat zu halten für die public-Eigenschaft. Warum also nicht nameValue nennen?
  • verwenden Sie, wenn möglich, Eigenschaften

Bei unserem Ansatz vermeiden wir meistens den Zweifel an der Unterstreichung "_" und haben gleichzeitig einen deutlich lesbareren Code.

private string fubarValue; //different name. Make sense 99% of times
public string Fubar { ... } 
2
GameDeveloper

Das Schöne an Kodierstandards ist, dass es so viele zur Auswahl gibt:

Wählen Sie eine Konvention, die zu Ihnen passt, und verwenden Sie sie konsequent.

Die Microsoft-Konvention - pascalCase-private Felder und CamelCase-Eigenschaften sind aufgeräumt, können jedoch aufgrund von Tippfehlern zu Fehlern führen. Ich finde die führende Unterstrichkonvention ärgerlich, da sie jedes Mal, wenn Sie den Namen eingeben, zwei zusätzliche Tastenanschläge erfordert, aber Sie bekommen die Tippfehler nicht so oft (oder der Compiler fängt sie zuerst ein).

2
Nicholas Carey

Nun, das Framework Design Guidelines Dokument besagt Folgendes:

Namen der Felder Die Richtlinien für die Benennung von Feldern gelten für statische public und geschützte Felder. Interne und private Felder werden nicht von .__ abgedeckt. Richtlinien und öffentliche oder geschützte Instanzfelder sind von .__ nicht zulässig. die Mitglieder-Design-Richtlinien.

✓ Verwenden Sie PascalCasing in Feldnamen.

✓ Benennen Sie Felder mit einem Substantiv, einer Nominalphrase oder einem Adjektiv.

X Verwenden Sie KEIN Präfix für Feldnamen.

Verwenden Sie beispielsweise nicht "g_" oder "s_", um statische Felder anzugeben.

Für private Bereiche gibt es also keine offizielle Empfehlung. Wenn Sie jedoch die VS 2017-Schnellaktion "In vollständige Eigenschaft konvertieren" für eine Eigenschaft verwenden, geschieht dies:

 VS 2017 quick action "Convert to full property"

Es scheint also sicher anzunehmen, dass das Voranstellen von private -Feldern mit einem Unterstrich etwas Standard ist.

1
uceumern

Der c # weg ist

private string _fubar;
public string Fubar
{
    get
    {
        return _fubar;
    }
    set
    {
        _fubar = value;
    }
}

Wenn es sich jedoch nur um einen einfachen Getter/Setter ohne zusätzliche Logik handelt, können Sie einfach schreiben

public string Fubar { get; set; }

Keine Notwendigkeit für eine Hintergrundvariable oder irgendetwas.

1
CaffGeek

Eine andere Möglichkeit, mit einem Standardwert zu deklarieren

    private string _fubar = "Default Value";
    public string Fubar
    {
        get { return _fubar; }
        set { _fubar = value; }
    }
1

Ich denke, ein Name ist besser:

public string Fubar { get; private set; }
0
Abedron

Während die meisten Entwickler den Richtlinien von Microsoft folgen, folgen wir als Spieleentwickler dem Stil von Unity als ( einer der Skript-Quellcodes hier ):

static protected Material s_DefaultText = null;
protected bool m_DisableFontTextureRebuiltCallback = false;
public TextGenerator cachedTextGenerator { ... }
0
Richard Fu