2010-02-10 8 views
6

Microsoft says los campos y las propiedades deben diferir por algo más que casos. Entonces, si realmente representan la misma idea, ¿cómo deberían ser diferentes?Cómo nombrar mejor los campos y las propiedades

Aquí está el ejemplo de Microsoft de lo que no se debe hacer:


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

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

Ellos no dan ninguna orientación sobre cómo debe mirar. ¿Qué hacen la mayoría de los desarrolladores?

+0

yo sólo uso mi mano ejecución del programa de generación de identificador al azar mientras estoy de programación, y cuando quiero un nuevo nombre de usuario, sólo pídalo y use eso. –

Respuesta

11

No, Microsoft dice miembros visibles públicamente deben diferir en más de un solo caso:

Esta regla solo se activa en miembros visibles públicamente.

(Eso incluye a los miembros protegidos, ya que son visibles para las clases derivadas.)

Así que esto está muy bien:

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

Mi regla personal es no permitir que cualquier cosa otros campos privados de todos modos , en ese punto no es un problema

¿Realmente necesita campos protegidos? ¿Qué hay de hacer que la propiedad tenga un setter protegido si quiere poder mutarlo desde clases derivadas?

+0

¡Buena captura! Me perdí la frase "Esta regla solo se activa en miembros visible públicamente". en la página. Mi cabeza daba vueltas por un momento. – User1

+0

Además, estoy completamente de acuerdo en que los campos nunca deberían ser públicos. Ese debería ser realmente el problema, no es que tengan el mismo nombre. los campos públicos rompen la encapsulación, no estoy seguro de por qué pueden incluso compilar de esa manera. – User1

+0

Solo una nota rápida. Sin ningún tipo de prefijo de nomenclatura de campo ... los campos de clase son indistinguibles de las variables de función locales, a menos que los prefija todos con esto. (que es realmente detallado). Agregar un prefijo, como _ o m_, puede ayudar GRANDEMENTE a mejorar la claridad de su código, y es muy recomendable. – jrista

0

me gustan:

protected string _Bar; 

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

que la mayoría de los desarrolladores prefijo de variables miembro con subrayan este modo:

protected string _bar; 
7

Esto puede hacer que algunos desarrolladores se lancen con disgusto, pero me gusta nombrar convenciones que me permitan distinguir las variables de los miembros de los locales de un vistazo.

Por lo tanto, hago a menudo algo como:

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' para miembro casi me hace tirar mis cookies. :) – User1

+0

Soy un codificador de underbar. Sin bombas por favor. – kenny

+0

Sé que este hilo es viejo, pero después de leer toneladas de discusión sobre este tema, también me he decidido a subrayar campos de miembros privados. Es útil saber, de un vistazo, * que algo es un campo de miembro privado *, en lugar de saber que cae bajo una determinada regla de envoltura. –

0

Personalmente, hago lo siguiente:

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

Originalmente solía usar _ o m_ como un prefijo para todos mis campos hasta que comencé a buscar un montón de código .NET de Microsoft a través de Reflector. Microsoft también usa el paradigma s_ y m_, y me gusta. Hace que sea fácil saber exactamente qué es un campo cuando estás leyendo el cuerpo del código de una función. No tengo que señalar nada y esperar a que aparezca una información sobre herramientas o algo así. Sé si algo es estático o instancia simplemente por su prefijo de campo.

0

Depende de usted o de la norma de codificación de su compañía/organización.Pero la mayoría de los programadores utilizar camelCasing o subrayan + camelCasing en Campos y PascalCasing sobre las propiedades como:

public class Foo  
{   
    protected string _bar; 

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