2013-01-25 16 views
5

So che c'è un dibattito/parere sull'utilizzo this parola chiave o di sottolineatura per quanto riguarda i campi privati ​​/ proprietà (e ne parlerò, mi sono bloccato in .NET 2.0)Convenzioni di denominazione in C# - Variabili globali

Personalmente, preferisco this, ma a volte non è possibile utilizzarlo, ad esempio quando è necessario fare riferimento a una variabile globale da un metodo statico. Bene, allora siamo costretti a usare il carattere di sottolineatura (supponendo che abbiamo solo 2 scelte, this o underscore). Ciò significa che se la mia classe utilizza metodi statici non è possibile utilizzare this in tutto il documento.

Ora, ho letto il naming guidelines e utilizzato StyleCop, entrambi preferisco non usare il carattere di sottolineatura, ma il mio Resharper insiste praticamente sull'uso di _.

Non credo sia giusto che una classe usi _ e la classe successiva usino this semplicemente per adattarsi quando le classi mescolano metodi statici e non statici! Il consiglio qui su SO è quello di mantenere una implementazione/stile, ma non so se questo significa che dovrei ignorare Microsoft (e so che la SM non segue sempre le proprie regole)!

È stato suggerito il prefisso con qualcos'altro, simile all'ungherese ma prefisso con globVariableName dove glob indica globale. Odio questa idea, è troppo su misura e non sarà evidente a nessun altro sviluppatore al di fuori della mia squadra.

Quindi, la mia domanda è: qual è il modo migliore per definire le variabili globali in modo coerente? Dal momento che sono le guide di denominazione, può essere che posso semplicemente ignorare (almeno _ può essere usato in modo coerente ma è sbagliato ignorare il consiglio dei creatori del linguaggio).

+0

In C++ 'm_' era la 'convenzione', congressi della losest senso del termine ... – MoonKnight

+0

Con "variabile globale", suppongo tu intenda una variabile protetta o privata che sia 'static' o' const'. Se è così, vanno con PascalCase, se sono privati ​​/ protetti non dovrebbero. Non vedo nessun conflitto lì. – istepaniuk

+0

Non vedo come questo non possa trasformarsi in una discussione estesa. Suggerisco di porre questa domanda su http://programmers.stackexchange.com/ poiché non hai una ** domanda ** specifica sul tuo codice. Devo mettere in discussione il design della tua classe se devi avere una variabile per fare riferimento a un oggetto all'interno di un metodo statico. Sembra essere il metodo statico dovrebbe un nome di variabile che descrive qualsiasi oggetto valido. ** In altre parole, forse l'utilizzo di una variabile globale in un caso come questo è l'intero problema. ** –

risposta

1

da variabili globali, suppongo che voi dire const o static campi

io cosa StyleCop utilizzato per incoraggiarvi a utilizzare ClassName.staticField per static e const campi, ma sembra aver abbandonato questa regola, almeno per impostazione predefinita. Questo è ancora un bel modo per farlo però.

Inoltre, è possibile configurare Resharper per riprodurre correttamente StyleCop.

2

Basta usare il nome della classe nello stesso modo in cui si utilizzerà "questo", in una classe statica. Esempio segue:

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; 
    } 
} 

Nota: Non può effettivamente pensare di qualsiasi altro modo per farlo.

+0

devono essere inseriti in PascalCase. – istepaniuk

+0

PascalCase corretto – Alex

0

questa è solo la mia opinione personale;

  • Credo che l'utilizzo di this per ogni variabile privata sia molto utile; ha un effetto positivo sulla leggibilità del codice. Inoltre, quando si utilizza un metodo di iniezione di un costruttore DI, consente di utilizzare la stessa variabile senza alcuna confusione, il che sembra molto appropriato.

    public void SomeMethod(int someVariable) 
    { 
        this.someVariable = someVariable; 
    } 
    
  • preferisco this invece di sottolineatura; sottolineatura sembra carina a prima vista; ma riferendosi agli esempi precedenti ha un effetto negativo sulla leggibilità.

  • Denomino le variabili statiche allo stesso modo in cui nomino le variabili di classe; l'utilizzo della parola chiave this riduce il rischio di confusione tra variabili private e statiche.

0

Uso sempre il carattere di sottolineatura per le variabili statiche e di istanza.

Per variabili istanza i uso this.variable

Per static variabili i, a volte, li prefisso con il nome di classe, per esempio, ClassName.variable

Problemi correlati