property niveles functions enum acceso c# private specifications access-modifiers auto-generate

niveles - property c#



¿Alguna razón para escribir la palabra clave "privada" en C#? (9)

Hasta donde sé, private es el valor predeterminado en todas partes en C # (lo que significa que si no escribo public , protected , internal , etc., será private por defecto). (Por favor, corríjame si estoy equivocado.)

Entonces, ¿cuál es el motivo para escribir esa palabra clave, o por qué existe 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é incluso escribe privado si eso es implícito y predeterminado? Solo para que los desarrolladores principiantes (que no saben que es el valor predeterminado de C #) sepan que es privado. ¿O hay una diferencia para el compilador?

Además, ¿hay algún caso en el que escribir "privado" (solo) cambie la accesibilidad del miembro?


AFAIK, privado es el valor predeterminado en todas partes en C #

No del todo: el valor predeterminado es "el acceso más restringido disponible para esta declaración". Entonces, por ejemplo, con un tipo de nivel superior, el valor predeterminado es internal ; para un tipo anidado, el predeterminado es private .

Entonces, ¿cuál es el motivo para escribir esa palabra clave o por qué existe?

Lo hace explícito, lo cual es bueno por dos razones:

  • Lo hace más claro para aquellos que no conocen los incumplimientos, según su pregunta (nunca me gustó este argumento, personalmente, pero pensé que vale la pena mencionarlo)
  • Da la impresión de que deliberadamente has decidido hacerlo de forma privada, en lugar de simplemente eliminar los valores predeterminados.

En cuanto a tu última parte:

Además, ¿hay algún caso en el que escribir "privado" (solo) cambie la accesibilidad del miembro?

Sí, para hacer que la mitad de una propiedad sea más restrictiva que la otra:

// Public getter, public setter public int Foo { get; set; } // Public getter, private setter public int Bar { get; private set; }

Solía ir con valores predeterminados donde podía, pero estoy convencido (en parte por Eric Lippert) de que dejar en claro que lo has pensado y decidido hacer algo privado es una buena idea.

Personalmente, desearía que hubiera una forma de hacerlo también para sellado / sin sellar, para declaraciones de tipo, posiblemente ni siquiera tenga un valor predeterminado. Sospecho que muchos desarrolladores (incluyéndome a mí mismo si no soy cuidadoso) dejan las clases sin sellar solo porque es menos esfuerzo que sellarlas.


AFAIK, private es el valor predeterminado en todas partes en C # (lo que significa que si no escribo public, protected, internal, etc., será privado por defecto). (por favor corrígeme si está mal).

Esto no es verdad. Los tipos definidos dentro de un espacio de nombres (clases, estructuras, interfaces, etc.) serán internos por defecto. Además, los miembros de diferentes tipos tienen diferentes accesibilidades predeterminadas (como público para los miembros de la interfaz). Para obtener detalles, vea Niveles de accesibilidad en MSDN.

También,

Entonces, ¿cuál es el motivo para escribir esa palabra clave o por qué existe?

Especificar esto explícitamente ayuda a denotar su intención de hacer el tipo privado, muy explícitamente. Esto ayuda a mantener el código a lo largo del tiempo. Esto puede ayudar a otros desarrolladores (o a usted mismo) a saber si un miembro es privado por defecto o a propósito, etc.


Hasta donde yo sé, privado es el predeterminado en todas partes en C #

Declarar explícitamente privado significa que sabes que es privado. No solo creo que lo es, porque, por lo que usted sabe, es el valor predeterminado. También significa que otra persona que mira el código sabe de qué se trata.

No hay un "Creo que es", "Estoy bastante seguro de que es así", etc. Simplemente lo es . Y todos están en la misma página.

No soy un desarrollador de C # . Si tuviera que trabajar con un código que no se declaró explícitamente privado , probablemente asumiría que era interno .

No me gusta cuando las cosas están implícitamente establecidas. Nunca es tan claro como cuando se establecen explícitamente.


La legibilidad, la demostración de intención son dos grandes razones que se me ocurren.


Legibilidad: no todos pueden saber que lo privado es el comportamiento predeterminado.

Intención: da una clara indicación de que usted ha declarado específicamente que la propiedad es privada (por el motivo que sea).


Mucha gente (gente como yo!) Programa regularmente en varios idiomas. Ser explícito con cosas como estas me impide tener que recordar todos los detalles arcanos de todos los idiomas en los que programo.


Una buena razón para especificar explícitamente la visibilidad es para que no tenga que pensar en cuál es el valor predeterminado para el contexto en el que se encuentra.

Otra buena razón es porque FxCop te dice que lo hagas.


Yo diría que es coherente con la legibilidad del alcance del resto de la clase.


private agrega desorden visual. Para aquellos que insisten en que hace las cosas explícitas, les preguntaría: ¿también lo hacen con las matemáticas? Por ejemplo:

var answer = a + b / c;

¿No lo ve claro sin paréntesis redundantes en torno a b / c ?

La regla en C # es muy simple: por defecto, todo es lo más cercano a lo privado que puede ser. 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.