2013-01-25 15 views
5

Ich weiß, es ist eine Debatte/Meinung zu this Schlüsselwort oder in Bezug auf private Felder/Eigenschaften unterstreichen (und ich werde erwähnen, ich bin fest auf .NET 2.0)Namenskonventionen in C# - Globale Variablen

Persönlich bevorzuge ich this, aber es gibt Zeiten, die Sie nicht verwenden können, zum Beispiel wenn Sie eine globale Variable innerhalb einer statischen Methode referenzieren müssen. Nun, dann sind wir gezwungen, den Unterstrich zu verwenden (vorausgesetzt, wir haben nur 2 Wahlmöglichkeiten, this oder Unterstrich). Das heißt, wenn meine Klasse statische Methoden verwendet, kann ich this im gesamten Dokument nicht verwenden.

Nun habe ich die naming guidelines gelesen und verwendet StyleCop, beide würde ich eher nicht den Unterstrich verwenden, aber mein Resharper besteht ziemlich auf die Verwendung von _.

Ich glaube nicht, dass es richtig ist, eine Klasse verwenden die _ und die nächste Klasse verwenden this einfach zu berücksichtigen, wenn die Klassen nicht statische und statische Methoden mischen! Der Rat hier auf SO ist, zu einer Implementierung/einem Stil beizubehalten, aber ich weiß nicht, ob das bedeutet, dass ich Microsoft ignorieren sollte (und ich weiß, dass MS ihren eigenen Regeln nicht immer folgen)!

Es wurde vorgeschlagen, etwas anderes anzuhängen, ähnlich dem Ungarischen, aber Präfix mit globVariableName, wobei glob global anzeigt. Ich hasse diese Idee, sie ist zu maßgeschneidert und wird für keinen anderen Entwickler außerhalb meines Teams offensichtlich sein.

Also, meine Frage ist, was ist der beste Weg, um globale Variablen konsequent zu definieren? Da sie Guides benennen, kann ich sie einfach ignorieren (mindestens _ kann konsistent verwendet werden, aber es fühlt sich falsch an, den Rat der Ersteller der Sprache zu ignorieren).

+0

In C++ 'm_' war die 'Konvention', Tagung im loste Sinn des Begriffs ... – MoonKnight

+0

Mit 'globaler Variable', denke ich, dass Sie eine geschützte oder private Variable meinen, die 'statisch' oder 'const' ist. Wenn das der Fall ist, gehen sie mit PascalCase, wenn sie privat/geschützt sind, sollten sie nicht. Ich sehe dort keinen Konflikt. – istepaniuk

+0

Ich sehe nicht, wie dies nicht zu einer ausgedehnten Diskussion werden kann. Ich schlage vor, diese Frage auf http://programmers.stackexchange.com/ zu stellen, da Sie keine ** spezifische ** Frage zu Ihrem eigenen Code haben. Ich muss Ihr Klassendesign in Frage stellen, wenn Sie eine Variable haben müssen, um ein Objekt innerhalb einer statischen Methode zu referenzieren. Scheint die statische Methode sollte ein Variablenname sein, der ein beliebiges gültiges Objekt beschreibt. ** Mit anderen Worten, vielleicht verwendet eine globale Variable in einem Fall wie diesem das gesamte Problem. ** –

Antwort

1

Durch globale Variablen, ich nehme an, Sie meinen const oder static Felder

I Sache StyleCop verwendet, um Sie zu ermutigen, ClassName.staticField für static und const Felder zu verwenden, aber es scheint diese Regel fallen gelassen zu haben, zumindest in der Standardeinstellung. Das ist immer noch eine gute Möglichkeit, es zu tun.

Sie können Resharper auch so konfigurieren, dass er gut mit StyleCop spielt.

2

Verwenden Sie einfach den Klassennamen auf dieselbe Weise wie in einer statischen Klasse "this". Beispiel folgt:

public static class MyStatic 
{ 
    public static object Global; 

    public static void SomeMethod() 
    { 
     var theGlobal = MyStatic.Global; 
    } 
} 

public class MyNonStatic 
{ 
    public object Global; 

    public void SomeMethod() 
    { 
     var theGlobal = this.Global; 
    } 
} 

Hinweis: Ich kann nicht wirklich an eine andere Möglichkeit denken, es zu tun.

+0

Typnamen sollten in PascalCase gehen. – istepaniuk

+0

PascalCase fixiert – Alex

0

das ist nur meine persönliche Meinung;

  • I this für jede private Variable glauben verwendet, ist sehr nützlich; Dies wirkt sich positiv auf die Lesbarkeit des Codes aus. Wenn Sie eine DI-Konstruktor-Injektionsmethode verwenden, können Sie die gleiche Variable ohne Verwechslungen verwenden, was sehr sinnvoll erscheint.

    public void SomeMethod(int someVariable) 
    { 
        this.someVariable = someVariable; 
    } 
    
  • Ich ziehe this statt Strich; Unterstrich scheint auf den ersten Blick hübsch; In Bezug auf die vorherigen Beispiele wirkt sich dies jedoch negativ auf die Lesbarkeit aus.

  • Ich nenne statische Variablen auf die gleiche Weise wie ich Klassenvariablen nenne; Verwendung von this Schlüsselwort verringert das Risiko der Verwechslung zwischen privaten und statischen Variablen.

0

Ich verwende immer Unterstreichung für statische und Instanzvariablen.

Zum Beispiel Variablen i verwenden this.variable

Für static Variablen i, manchmal das Präfix sie mit dem Namen der Klasse, zB ClassName.variable