2010-09-21 33 views
132

Estoy tratando de encontrar una referencia para la visibilidad predeterminada de varios aspectos de C#. Tipos de clase, campos, métodos, enumeraciones, etc.Visibilidad predeterminada para clases C# y miembros (campos, métodos, etc.)?

¿Alguien puede proporcionar una lista de estos junto con su visibilidad predeterminada (es decir, sin modificador prefijado)?

+0

posible duplicado de [modificador de acceso por defecto en C#] (http://stackoverflow.com/questions/3675575/default -access-modifier-in-c) –

+8

No lo consideraría un duplicado ... esa pregunta es específica (¿Cuál es el valor predeterminado para ESTO?), esta es amplia (¿Cuáles son TODOS los valores predeterminados?) – WernerCD

Respuesta

206

Toda la información que busca puede encontrar here y here (gracias Reed Copsey):

Desde el primer enlace:

clases y las estructuras que se declaran directamente dentro de un espacio de nombres (en otras palabras, que no están anidados dentro de otras clases o estructuras) puede ser público o interno. Internal es el valor predeterminado si no se especifica ningún modificador de acceso.

...

El nivel de acceso para miembros de la clase y los miembros de la estructura, incluyendo clases anidadas y estructuras, es privados por defecto.

...

interfaces de por defecto a acceso interno.

...

delegados se comportan como clases y las estructuras. De forma predeterminada, tienen acceso interno cuando se declaran directamente dentro de un espacio de nombre y acceso privado cuando están anidados.


A partir del segundo enlace:

tipos de nivel superior, que no están anidados en otros tipos, sólo puede tener accesibilidad interna o pública. La accesibilidad predeterminada para estos tipos es interna.

Y para tipos anidados:

 
Members of Default member accessibility 
---------- ---------------------------- 
enum   public 
class   private 
interface  public 
struct  private 
+5

Una buena compilación de la información de Reed, pero olvidó especificar que dichos modificadores de acceso también se aplican a los métodos. – Joel

+2

@Joel ¿Qué quieres decir? Él claramente declara "miembros". Los miembros son datos y comportamientos y, por lo tanto, incluyen métodos. – rism

+0

En caso de que los desarrolladores de vb.net estén considerando esto, vb es diferente. El alcance predeterminado para los miembros de la clase vb es 'Public'. Los miembros de 'Enum' también son' Public'. Probablemente sea menos confuso usar solo un alcance explícito en su caso, ya que es muy probable que los desarrolladores de C# lo traduzcan o lean en algún momento. La generación de código en vb.net no hace esto por usted, desafortunadamente. – toddmo

-1

Por defecto es private. A menos que estén anidados, las clases son internal.

+1

no son enumeraciones público por defecto? –

+4

@Jay: a menos que estén anidados. @Ryan: No, las enumeraciones no anidadas son internas por defecto. –

+2

@Ryan: los miembros de Enum son públicos por defecto, pero la enumeración en sí es interna. –

7

Por defecto, el modificador de acceso para una clase es internal. Eso significa que se puede acceder a una clase dentro de la misma asamblea. Pero si queremos que se acceda a la clase desde otras asambleas, entonces debe hacerse pública.

+17

Esta información ya estaba presente en las otras respuestas. Solo debe responder una pregunta, especialmente una anterior como esta, cuando tiene información adicional que proporcionar o si cree que las otras respuestas son incorrectas. De todos modos, bienvenido a Stack Overflow. – Gorpik

2

De MSDN:

tipos de nivel superior, que no están anidados en otros tipos, sólo puede tener internal o public accesibilidad. La accesibilidad predeterminada para estos tipos es internal.


tipos anidados, que son miembros de otros tipos, se han declarado accesibilidades como se indica en la siguiente tabla.

Default Nested Member Accessibility & Allowed Accessibility Modifiers

Fuente: Accessibility Levels (C# Reference) (diciembre 6 º, 2017)

Cuestiones relacionadas