webentwicklung-frage-antwort-db.com.de

Was ist die Namenskonvention für statische C # -Felder?

Ich habe vor kurzem begonnen, ReSharper zu verwenden, das ein fantastisches Werkzeug ist. Heute bin ich auf eine Benennungsregel für statische Felder gestoßen, nämlich das Präfixieren mit einem Unterstrich, d. H.

private static string _myString;
  1. Ist dies wirklich die Standardmethode, um statische Variablen zu benennen? Wenn ja, ist es nur eine persönliche Präferenz und ein persönlicher Stil, oder hat es eine geringere Auswirkung? ZB Compilation JIT etc?
  2. Woher kommt dieser Stil? Ich habe es immer mit C++ in Verbindung gebracht, stimmt das?
31
Matt

Die Microsoft-Richtlinien enthalten keine Angaben zu privaten Bereichen, sie betreffen nur öffentlich sichtbare Mitglieder.

Übliche Konventionen sind camelCase, _camelCase und manchmal sogar der Kater von C++/MFC m_camelCase.

Wenn Sie camelCase ohne Präfix verwenden, unterscheiden sich Ihre Eigenschaftsunterlegungsfelder nur in dem Fall vom Eigenschaftennamen. Dies ist in C # kein Problem, funktioniert jedoch nicht in einer von Groß- und Kleinschreibung nicht abhängigen Sprache wie VB.NET.

So viele Leute, auch ich, verwenden gerne ein Unterstrich-Präfix, damit in allen Sprachen dieselben Standards verwendet werden können. Nach meiner Erfahrung ist Unterstrich viel häufiger als m_.

23
Joe

Verwenden Sie gemäß MSDNPascal Case für statische Felder. Ich lache immer, wenn MSDN und StyleCop sich widersprechen :).

Wenn Sie also die MSDN-Standards einhalten, lautet der korrekte Weg:

private static string MyString;
20
dcp

Laut StyleCop (und mit den Standardeinstellungen) werden die meisten Felder (wie unten angegeben) mit einem Kleinbuchstaben am Anfang benannt.

SA1306: FieldNamesMustBeginWithLowerCaseLetter

... Feld- und Variablennamen müssen mit einem Kleinbuchstaben beginnen, es sei denn, das Feld ist public oder internal, const oder nicht-private und readonly. In diesen Fällen sollte das Feld mit einem Großbuchstaben beginnen.

Siehe auch SA1309: FieldNamesMustNotBeginWithUnderscore .

13
Mark Rushakoff

Es ist eigentlich der Stil für ein private - Feld, statisch oder nicht. (Zumindest in ReSharper)

11
Aren

Die Konvention ist, was auch immer Ihr Kodierungsstandard sagt.

4
Muad'Dib

Das Problem, das ich mit der MSDN-Richtlinie (Fall Pascal verwenden) habe, besteht darin, dass es keinen Unterschied zwischen einer privaten statischen Variablen und einer öffentlichen (nicht statischen) Eigenschaft gibt. Das gleiche Problem würde für statische Eigenschaften auftreten - keine Unterscheidung zwischen statisch und nicht statisch.

Vielleicht ist das absichtlich? 

Ein Ausweg wäre, den gleichen Standard für die Statik wie für die Nichtstatik zu verwenden, die Verwendung der Statik jedoch immer durch das Präfix mit dem Klassennamen zu qualifizieren. Es können einige zusätzliche Zeichen eingegeben werden, der Code wird jedoch lesbarer. Zum Beispiel:

public class Employee
{
    private static Int32 thresholdPercentage = 5;
    public static String TooMuchMessage = "Unacceptable pay rise - sorry!";

    private Decimal _salary = 0.0m;

    public void RaiseSalary(Int32 raiseAmountPercentage)  
    {
        if (raiseAmountPercentage > Employee.thresholdPercentage)
            throw new ApplicationException(Employee.TooMuchMessage);

        _salary *= 1 + (raiseAmountPercentage / 100);

        return;
    }
}
3
Adrian Hall

Für statische Felder habe ich StaticPascalCase (zB StaticPersonCache) festgelegt, da es sich eindeutig von einer Instanzvariablen unterscheidet. Dazu gehören private statische Felder sowie statische Felder mit anderen Sichtbarkeitsmodifizierern.

Bei statischen Variablen ist es mir weniger ein Anliegen, die öffentliche/private Sichtbarkeit durch den Namen anzugeben, als die Art und Weise, wie die Variable zwischen Instanzen arbeitet. Da es nicht viele statische Variablen gibt (und auch nicht geben sollte), wird der 'Hugarian-like'-Modifikator nicht oft angewendet.

Entsprechend verwende ich für thread static variables ([ThreadStatic] oder ThreadLocal) die von mir verwendete Konvention TS_UpperCamelCase (zB TS_Random). Dieser "Bruch" von Normen vermittelt wiederum sehr wichtige Informationen, die andere Entwickler auf den ersten Blick möglicherweise nicht sehen. Der Name wird daher als eine Art Warnflag verwendet.

Ich verwende ReSharper und habe die Warnungen/Hinweise entsprechend angepasst. Die meisten anderen Namenskonventionen werden bei den ReSharper-Standardeinstellungen beibehalten.

Meine Auswahl solcher "Nicht-Standard" -Konventionen für statische/threadstatische Felder (Hinweis: Microsoft verwendet TS_ in etwas Code in der .NET-Bibliothek) ist, weil ich mehr als eine "Quirk" ausgeführt habe. wegen falscher identifizierung von statischen/ThreadStatic/instanzvariablen: mit StaticX, TS_X und _x ist das viel schwieriger.

1
user2864740

Andere Antworten hier sind etwas verwirrend.

Vom .NET-Standard

Verwenden Sie PascalCasing in Feldnamen.
Die Feldbenennungsrichtlinien gelten für statische öffentliche und geschützte Felder. 

Beispiel: MyStaticVariable, ActiveUserCount usw.

1 - Es gibt keine definitive Standardregel für Variablennamen. Es gibt C # -Compiler-Anforderungen für das, was erlaubt ist und was nicht erlaubt ist (dh, kann nicht mit einer Zahl beginnen), aber Regeln für die Programmiersprache sind im Allgemeinen den Programmierern/Organisationen überlassen. ReSharper hat vordefinierte Stilregeln. Sie sind jedoch lediglich als Standardwerte in einem Konventionenkonfigurationsansatz eingerichtet und können geändert werden.

2 - In diesem Wikipedia-Artikel können Sie die Geschichte von Camel Casing sehen.

0
JD Courtoy