Por lo que yo sé, private
es el valor por defecto en todas partes en C # (lo que significa que si no lo hago escritura public
, protected
, internal
, etc, será private
por defecto). (Por favor, corríjame si estoy equivocado.)
Entonces, ¿cuál es la razón para escribir esa palabra clave, o por qué existe incluso para los miembros?
Por ejemplo, cuando un controlador de eventos se genera automáticamente, se ve así:
private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{
}
Pero, ¿por qué escribe privado si eso está implícito y predeterminado? ¿Solo para que los desarrolladores novatos (que no saben que es el valor predeterminado de C #) sepan que es privado? ¿O hay alguna diferencia para el compilador?
Por otra parte, hay un caso en el que la escritura "privado" (solo) se cambiará la accesibilidad del usuario?
fuente
internal
sin embargo , un tipo de "nivel superior" será el predeterminado.Respuestas:
Esto no es verdad. Los tipos definidos dentro de un espacio de nombres (clases, estructuras, interfaces, etc.) serán internos de forma predeterminada. Además, los miembros de diferentes tipos tienen diferentes accesibilidades predeterminadas (como público para los miembros de la interfaz). Para obtener más información, consulte Niveles de accesibilidad en MSDN.
También,
Especificar esto explícitamente ayuda a denotar su intención de hacer que el tipo sea privado, de manera muy explícita. Esto ayuda a mantener el código con el tiempo. Esto puede ayudar a otros desarrolladores (o usted mismo) a saber si un miembro es privado de forma predeterminada o intencional, etc.
fuente
private
.get
y deset
forma predeterminada a la accesibilidad de la propiedad en síNo exactamente: el valor predeterminado es "el acceso más restringido disponible para esta declaración". Por ejemplo, con un tipo de nivel superior, el valor predeterminado es
internal
; para un tipo anidado, el valor predeterminado esprivate
.Lo hace explícito, lo cual es bueno por dos razones:
En cuanto a tu última parte:
Sí, por hacer que la mitad de una propiedad sea más restrictiva que la otra:
Yo solía ir con valores por defecto en todas partes que pude, pero me han convencido (en parte por Eric Lippert) que lo que es claro que ha pensado en ello y decidió hacer algo privado es una buena idea.
Personalmente, desearía que hubiera una forma de hacerlo para las declaraciones de tipo sellado / no sellado, posiblemente ni siquiera tener un valor predeterminado. Sospecho que muchos desarrolladores (incluido yo mismo si no tengo cuidado) dejan las clases sin sellar solo porque es menos esfuerzo que sellarlas.
fuente
final
un ejemplo más típico.private
agrega desorden visual. A aquellos que insisten en que hace las cosas explícitas, les pregunto: ¿Hacen esto también con las matemáticas? Por ejemplo:¿Le parece poco claro sin paréntesis redundantes
b / c
?La regla en C # es muy simple: de forma predeterminada, todo es lo más privado posible. Entonces, si necesita que algo sea más visible que el predeterminado, agregue un modificador. De lo contrario, no agregue palabras clave innecesarias a su código.
fuente
Friend
para miembros, por ejemplo. C # hace sus valores predeterminados de visibilidad de la manera correcta: las cosas se establecen en la menor visibilidad posible a menos que se modifiquen. Por lo que puedo encontrar, parece que lo mismo es cierto para C ++ (excepto las estructuras). (No parece ser cierto para F #.)var
resulta extraño que tanta gente esté a favor , porque reduce el desorden visual y, sin embargo, tanta gente está a favor de escribir sin sentidoprivate
.Declarar explícitamente privado significa que sabe que es privado. No solo piense que lo es, porque hasta donde usted sabe, es el predeterminado. También significa que alguien más que mira el código sabe qué es.
No hay "Creo que lo es", "Estoy bastante seguro de que lo es", etc. Simplemente es . Y todos están en la misma página.
No soy un desarrollador de C # . Si tuviera que trabajar con algún código que no se declaró explícitamente privado , probablemente asumiría que es interno .
No me gusta cuando las cosas se establecen implícitamente. Nunca es tan claro como cuando se establecen explícitamente.
fuente
Legibilidad: no todo el mundo puede saber que la privacidad es el comportamiento predeterminado.
Intención: da una indicación clara de que ha declarado específicamente la propiedad privada (por cualquier motivo).
fuente
La legibilidad, la demostración de intención son dos grandes razones en las que puedo pensar.
fuente
Una buena razón para especificar explícitamente la visibilidad es que no tiene que pensar en cuál es el valor predeterminado para el contexto en el que se encuentra.
Otra buena razón es que FxCop te dice que lo hagas.
fuente
Mucha gente (¡gente como yo!) Programa regularmente en un puñado de idiomas diferentes. Ser explícito con cosas como estas me evita tener que recordar todos los detalles arcanos de todos los lenguajes en los que programo.
fuente
private
" es un detalle arcano ... Pero entiendo el punto. El otro día tuve problemas para recordar cómo funcionaba el marco que usé la semana pasada ( MEF ).Diría que por coherencia con la legibilidad del alcance del resto de la clase.
fuente