2010-12-13 19 views
8

¿Cuál es el uso de la palabra clave privada si todo, de forma predeterminada, es privada?palabra clave privada vs no palabra clave privada

public class A { 
    object someObject; 
    private object someOtherObject; 
} 

¿No serían las dos cosas anteriores privadas? Si ambos son privados, ¿por qué la necesidad de la palabra clave en sí?

+5

El valor por defecto no es privado de * todo *: El valor predeterminado de miembros de la clase/struct es privada; el valor predeterminado para los tipos de nivel superior es interno. http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx – LukeH

+0

Enlace impresionante, LukeH – MyNameIsJob

+0

Duplicado (aunque esta pregunta fue primero): http://stackoverflow.com/questions/8479214/any-reason -to-write-the-private-keyword-in-c – Jon

Respuesta

20

El uso explícito de la palabra clave aclara el código, cualquiera que sea el valor predeterminado.

Evite las conjeturas o la necesidad de verificación de datos por parte del lector de códigos/mantenedor, cuando sea posible.

Hay una referencia para la información de visibilidad a través del this prior question.

1

La limpieza del código está al lado de Godly-ness. Lo hace fácil de leer.

3

El valor predeterminado ha cambiado de vez en cuando. Solía ​​ser en VB que todo era público por defecto. Ahora es privado.

En otros lenguajes de programación, el valor predeterminado es diferente.

Por lo tanto, escribirlo ayuda al lector del código.

+2

Cambiar el valor predeterminado en un lenguaje establecido como C# sería un cambio radical. La probabilidad de que esto ocurra es muy pequeña, me imagino. – LukeH

+1

Así que pensaron en los días de VB6. Entonces VB.NET vino ... – fingerprint211b

+3

@ fingerprint211b: Eso es cierto, pero muchos considerarían que VB6 y VB.NET son dialectos separados en lugar de solo un incremento del número de versión. – LukeH

9

Como Steve Townsend said, aclara código, pero también es útil en propiedades con acceso mixto, por ejemplo .:

public int SomeProperty { get; private set; }