2009-04-28 19 views
3

Es scheint bei der BCL der Fall zu sein, Unterstriche für private lokale Variablen zu verwenden. Ich benutze sie nie, aber weg wie folgt:Unterstreichungen für private lokale Variablen?

int count = 0; 

this.Count++; 

public int Count 
... 

public ClassName (int count) 
{ 
    this.Count = count; 
} 

Was sind Ihre Gedanken dazu? Sind sie Probleme mit meinem Ansatz?

+2

Sie werden nie einen Konsens über Namenskonventionen für Instanzvariablen erhalten. –

+0

Sehr ähnlich zu http://stackoverflow.com/questions/450238/to-underscore-or-not-to-underscore-that-is-the-question –

+0

Diese Frage ist definitiv subjektiv, aber ich bin mir nicht sicher über argumentativ. Das OP bittet um Probleme mit ihrem Vorgehen. Es gibt einige potenzielle Probleme, und sie sind es wert, erkundet zu werden. Ich neige dazu zu glauben, dass diese Frage nur ein Ruf ist, aber sie hat ihren Wert. –

Antwort

3

Dies ist im Grunde etwas, was Sie über sich selbst entscheiden müssen, finden Sie oder machen Sie einen Style Guide und folgen Sie ihm.

Persönlich verwende ich _ als Präfix für private Felder der Klasse.

1

Es ist nicht erforderlich, den Unterstrich zur Bezeichnung privater Variablen zu verwenden. Es ist alles persönliche Vorlieben. Ich benutze sie nur, damit ich weiß, dass ich die lokale Variable verwende, anstatt dass Intellisense stattdessen mein öffentliches Eigentum verwendet.

1

IMO, sollten Sie nie eine private Member-Variable den gleichen Namen wie der Name einer Eigenschaft, Methode oder etwas anderes, für diese Angelegenheit. Es sollte klar sein, mit welchem ​​benannten Element Sie arbeiten. Dadurch wird Ihr Code einfacher zu verstehen und zu pflegen, und Programmierfehler werden von Ihnen selbst oder von anderen Entwicklern, die Ihren Code pflegen müssen, reduziert.

Wenn Sie jemals den Code nach VB portieren wollten, würde diese spezielle Benennung nicht funktionieren. Nicht sicher, warum Sie zu VB wechseln möchten, aber es passiert.

+0

Anders als VB-Port, warum denkst du, es wäre unklar? Wenn es sich um einen kleinen Fall handelt, dann ist es privat? Du hast an etwas anderes gedacht? –

+1

Ich habe sehr große Klassen mit (mehreren) Bildschirmen gesehen, die voll von Instanzvariablen sind, wo es sehr schwierig ist, sie zu pflegen, weil Sie den Umfang der Variablen nicht bestimmen können. Es ist jedoch ein Symptom, dass Sie in kleinere Klassen umgestalten sollten. In kleinen Klassen mit einer angemessenen Anzahl von privaten Statusvariablen sind unvorbereitete Instanzvariablen recht wartungsfreundlich und leicht zu verstehen. –

+0

Danke Michael, kannst du bitte ein Beispiel geben? Ich weiß nicht, wie man den Umfang einer Variablen nicht erkennen könnte, wenn ich nur auf den Namen schaue und meinen Ansatz verwende. –

1

Ich verwende Unterstriche. Es hilft mir, den variablen Umfang in Schach zu halten und die Möglichkeit, Kollisionen zu benennen, zu reduzieren.

1

Unterstriche sind sinnvoller für Sprachen, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird (wie VB.Net). In Sprachen wie C# kommt es ausschließlich auf persönliche Vorlieben an.

Wenn Sie eine Voreingenommenheit haben, this. vor einigen mehrdeutigen Zuordnungen zu setzen, dann sind Unterstriche für Sie. Ohne sie kann man gelegentlich tun versehentlich Dinge wie diese:

private int that; 

public void AssignThat(int that) 
{ 
    that = that; // assigns to method scope variable, not instance scope 
} 

FXCop oder R # das für Sie fangen sollte, und ich glaube, Sie eine Compiler-Warnung erhalten, aber es ist möglich.

+1

Ja, Sie erhalten eine Compiler-Warnung, wenn Sie sich selbst eine Variable zuweisen. – Albic

+0

@Albic, danke. R # bietet immer an, diese für mich zu reparieren, also komme ich nie zum Kompilieren. –

0

Es gibt einen praktischen Grund, ein Präfix, IntelliSense, zu verwenden. ATM wird in der Art und Weise, wie es zwischen aktuellen Instanzvariablen und vererbten Eigenschaften/Variablen nicht wirklich unterscheidet, in einem Brainstate versetzt. Die Verwendung von '_' für private Variablen erleichtert die Lokalisierung von Variablen innerhalb der Intellisense-Liste und der Funktions-/Variablenliste im VS-Code-Editor. In gewisser Weise ist es eine breitere ungarische Notation.

2

Die einfache Regel, die wir hier verwenden, ist: Private Implementierungsdetails einer Klasse, einschließlich Variablennamen, sind vollständig dem Entwickler überlassen, der sie erstellt. Namen von öffentlichen/geschützten Methoden, Eigenschaften, Klassennamen usw. unterliegen den Best Practice-Richtlinien. Interne Typen können sogar als Teil davon betrachtet werden, da sie nicht öffentlich sichtbar sind.

Wenn jemand anders Ihre Bibliothek verwenden muss, muss er nie mit internen oder privaten Typen arbeiten, wird nicht sehen, ob Sie Unterstriche usw. verwendet haben. Mit anderen Worten, das liegt wirklich an Ihnen ....

Denken Sie daran, wenn jemand anderen Ihren Code später pflegen muss, sollte er nicht zu verschleiert sein ...