Los modificadores de acceso son palabras clave que se utilizan para especificar la accesibilidad de una clase (o tipo) y sus miembros. Estos modificadores se pueden usar desde el código dentro o fuera de la aplicación actual.
Los modificadores de acceso en .NET se utilizan para controlar la accesibilidad de cada uno de los miembros de un tipo desde diferentes áreas de código posibles. Esto se puede manejar desde dentro del conjunto actual o fuera de él. Un ensamblado representa una unidad lógica de funcionalidad y consta de tipos y recursos ubicados en uno o más archivos.
El propósito de usar modificadores de acceso es implementar la encapsulación, que separa la interfaz de un tipo de su implementación. Con esto, se pueden derivar los siguientes beneficios:
- Prevención de acceso a los datos internos establecidos por los usuarios en estado no válido.
- Provisión para cambios en la implementación interna de los tipos sin afectar los componentes que lo utilizan.
- Reducción de la complejidad del sistema al reducir las interdependencias entre los componentes del software.
El marco .NET ofrece la opción de tener cinco tipos de modificadores de acceso:
- Privado: el código dentro del tipo solo puede acceder a los miembros de ese tipo y, por lo tanto, la accesibilidad está limitada al tipo actual
- Público: el código desde cualquier lugar dentro del ensamblaje actual, u otro ensamblaje que haga referencia a él, puede acceder a los miembros del tipo y, por lo tanto, permite la accesibilidad desde cualquier lugar.
- Protegido: el código dentro del tipo, o sus clases derivadas, puede acceder a los miembros del tipo y, por lo tanto, la accesibilidad está limitada al tipo actual y las clases derivadas.
- Interno: el código del ensamblado actual, pero no de otro ensamblado, puede acceder a los miembros del tipo, por lo que la accesibilidad está limitada al ensamblado actual.
- Interno protegido: el código del ensamblado actual puede acceder a los miembros del tipo y también desde el ensamblado al que hace referencia. Por lo tanto, la accesibilidad proviene de clases derivadas en el ensamblado actual y debe tener lugar a través de una instancia de tipo de clase derivada en el ensamblado al que hace referencia.
Hay varias reglas que se aplican a los modificadores de acceso:
- Cuando no se especifica ningún modificador de acceso para escribir miembros, el nivel de acceso predeterminado es privado e interno.
- No se permiten modificadores de acceso para los espacios de nombres, ya que son públicos.
- Las clases anidadas y los miembros de estructura declarados dentro de un tipo son, para la clase contenedora, privados por defecto.
- Los miembros de la estructura no se pueden declarar protegidos ya que no admite la herencia.
- Los destructores no pueden tener modificadores de acceso.
- El tipo derivado no puede tener mayor accesibilidad que su tipo base.
- El miembro de un tipo contenedor debería tener una accesibilidad menor que la de su tipo contenedor. Esto se puede ilustrar con un ejemplo: un método público en un tipo contenedor no puede tener “A” como parámetro, si el tipo A no está en visibilidad pública.
- Las interfaces se declaran públicas e internas, y no pueden tener otros modificadores de acceso, ya que las interfaces se utilizan principalmente para el acceso de las clases a derivar de ella.
- Los modificadores de acceso se usan no solo para los miembros de la clase, sino también para otras construcciones de código con la misma intención.