2010-02-10 14 views
6

Microsoft says campi e proprietà devono differire da più di un semplice caso. Quindi, se rappresentano veramente la stessa idea, come dovrebbero essere diversi?Come meglio denominare campi e proprietà

Ecco l'esempio di Microsoft di cosa non fare:


using System; 
namespace NamingLibrary 
{  
    public class Foo // IdentifiersShouldDifferByMoreThanCase  
    {   
     protected string bar; 

     public string Bar   
     {    
      get { return bar; }   
     }  
    } 
} 

danno alcuna indicazione su come questo dovrebbe apparire. Cosa fanno la maggior parte degli sviluppatori?

+0

mi basta usare la mia pratica esecuzione del programma di generazione identificatore casuale, mentre io sono la programmazione, e quando voglio un nuovo nome utente, ho solo chiedilo per uno e usalo. –

risposta

11

No, Microsoft dice membri visibili pubblicamente devono differire di più di un semplice caso:

Questa regola viene attivata solo sui membri visibili pubblicamente.

(Che include membri protetti, in quanto sono visibili a classi derivate.)

Quindi questo va bene:

public class Foo 
{ 
    private string bar; 
    public string Bar { get { return bar; } } 
} 

mia regola personale non è quello di introdurre nulla campi privati ​​in ogni caso a quel punto non è un problema.

Avete davvero bisogno di campi protetti? Che ne dici di rendere la proprietà un setter protetto se vuoi essere in grado di mutarlo dalle classi derivate?

+0

Buona cattura! Mi è sfuggito il messaggio "Questa regola si attiva solo sui membri visibili pubblicamente". nella pagina La mia testa girava lì per un momento. – User1

+0

Inoltre, sono completamente d'accordo che i campi non dovrebbero mai essere pubblici. Questo dovrebbe essere il problema, non che abbiano lo stesso nome. i campi pubblici rompono l'incapsulamento, non sono sicuro del perché possano anche compilare in quel modo. – User1

+0

Solo una breve nota. Senza alcun tipo di prefisso di denominazione dei campi ... i campi delle classi sono indistinguibili dalle variabili delle funzioni locali, a meno che non li prefissi tutti con questo. (che è veramente prolisso). L'aggiunta di un prefisso, ad esempio _ o m_, può GRAZIEmente aiutare a migliorare la chiarezza del codice ed è altamente raccomandato. – jrista

0

mi piace:

protected string _Bar; 

public string Bar   
{    
    get { return _Bar; }   
}  
0

che la maggior parte sviluppatori prefisso variabili membro con sottolineano in questo modo:

protected string _bar; 
7

Questo potrebbe far scattare alcuni sviluppatori là fuori con disgusto, ma mi piacciono le convenzioni di denominazione che mi consentono di distinguere le variabili membro dai locali a colpo d'occhio.

Quindi, faccio spesso qualcosa di simile:

public class Foo 
{ 
    protected string _bar; 

    public string Bar 
    { 
     get { return _bar; } 
    } 
} 

... o ...

public class Foo 
{ 
    protected string mBar; // 'm' for member 

    public string Bar 
    { 
     get { return mBar; } 
    } 
} 
+0

'm' per membro mi fa quasi gettare i miei biscotti. :) – User1

+0

Sono un programmatore di underbar. Niente bombe per favore – kenny

+0

So che questo thread è vecchio, ma dopo aver letto un sacco di discussioni su questo argomento, ho anche deciso di sottolineare i campi dei membri privati. È solo utile sapere, a colpo d'occhio, * che qualcosa è un campo di membri privati ​​* rispetto al solo sapere che rientra in una determinata regola di involucro. –

0

Io personalmente faccio quanto segue:

class SomeClass 
{ 
    private static string s_foo; // s_ prefix for static class fields 
    private string m_bar;   // m_ prefix for instance class fields 

    public static string Foo 
    { 
     get { return s_foo; } 
    } 

    public string Bar 
    { 
     get { return m_bar; } 
    } 
} 

Originariamente utilizzavo _ o m_ come prefisso per tutti i miei campi fino a quando non ho iniziato a scavare molto codice Microsoft .NET tramite Reflector. Microsoft usa anche il paradigma s_ e m_, e mi piace un po '. Rende facile sapere esattamente che cosa è un campo quando stai leggendo il codice del corpo di una funzione. Non devo indicare nulla e aspettare che compaia un suggerimento o qualcosa del genere. So se qualcosa è statico o istanza semplicemente dal suo prefisso di campo.

0

Dipende dallo standard di codifica dell'azienda o dell'organizzazione.Ma la maggior parte dei programmatori utilizzano camelCasing o sottolineano + camelCasing sui Campi e PascalCasing su Case simili:

public class Foo  
{   
    protected string _bar; 

    public string Bar   
    {    
     get { return _bar; }   
    }  
} 
Problemi correlati