sobreescritos niveles new modificadores modificador metodos clase acceso abstracta c# .net encapsulation

c# - niveles - método sin modificador de acceso



override c# (8)

De The C # Programming Language, tercera edición de Anders Hejlsberg et al , sección 10.3.5 ("Miembros de la clase - Modificadores de acceso") en la página 434:

Una declaración de miembro de clase puede tener cualquiera de los cinco posibles tipos de accesibilidad declarada (§3.5.1): public , protected internal , protected , internal o private . Excepto por la combinación protected internal , es un error en tiempo de compilación especificar más de un modificador de acceso. Cuando una declaración de miembro de clase no incluye ningún modificador de acceso, se supone private . [Énfasis mío]

Y luego en la sección 11.2 ("Miembros de Struct") en la página 539:

Excepto por las diferencias señaladas en §11.3, las descripciones de los miembros de la clase proporcionadas en §10.3 a §10.14 también se aplican a los miembros de la estructura.

La Sección 11.3 no menciona nada sobre los modificadores de acceso, por lo que mi lectura de esto implica que los miembros de una struct sin un modificador de acceso también son private por defecto. Esto se corresponde con lo que dice MSDN y con mi propia experiencia.

Ok, esto me está molestando ... Sé que lo he leído en alguna parte y Google no está ayudando.

¿Cuál es el nivel de accesibilidad de un método que no especifica un modificador de acceso?

void Foo() { //code }

Quiero decir internal pero no estoy 100% seguro.


Espero que esto aclare todo lo que aparece en la captura de pantalla directamente desde MSDN


La accesibilidad predeterminada para un tipo es internal , pero la accesibilidad predeterminada de los miembros de ese tipo depende del tipo.

En general, los miembros de una clase son private por defecto, mientras que los miembros de una estructura son public por defecto. Esto varía según el idioma; los modificadores de acceso de estructura predeterminados para C ++ son públicos, mientras que para C # son privados.


Los métodos de clase son privados y están sellados por defecto en .NET. Esto significa que el método solo es visible dentro de la clase y no puede ser anulado por la clase heredada.


Oh, espera, hay una cosa más ...

interface declaraciones de métodos de interface son, por supuesto, public por definición. Por lo tanto, la siguiente implementación es public , sin un modificador de acceso explícito.

public class MyClass : IEqualityComparer<MyClass> bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {} }


Para una clase: Interna es el valor predeterminado si no se especifica ningún modificador de acceso.

Para un método: Privado es el valor predeterminado si no se especifica ningún modificador de acceso.


Sí, internal es el predeterminado para las clases, pero private es el predeterminado para los miembros.


Suponiendo que este es un método C #, ya que tiene la etiqueta ".net".

Las personas necesitan diferenciar entre accesibilidad de "miembro" y accesibilidad de "clase".