Hay básicamente seis niveles de accesibilidad:
- Público
- Protegido
- Interna
- Soldado
- Interno protegido
- Privado protegido
Sólo se permite un modificador de acceso para un miembro o tipo, a menos que esté usando interno protegido o privado protegido .
No se pueden asignar modificadores de acceso a los espacios de nombres, ya que éstos no poseen restricciones de acceso. Los tipos de nivel superior sólo pueden tener accesibilidad interna o pública , el valor por defecto para estos tipos es interna , si no se especifica lo contrario.
Los modificadores de acceso constituyen uno de los tres pilares de la programación orientada a objetos. Este pilar se llama Encapsulado . Los otros dos pilares son Herencia y Polimorfismo .
La encapsulación consiste en ocultar información o, más correctamente, proporcionar un acceso adecuado a información específica a quienes estén autorizados.
Como práctica óptima, los desarrolladores suelen definir los campos con nivel de acceso privado y proporcionar métodos de getter y setter como públicos. De esta manera, sólo se pueden realizar modificaciones controladas en los campos.
Aquí hay un ejemplo de eso:
1234567891011121314151617181920212223242526272829public classDeveloper{privatestring Name;privateint Salary;publicDeveloper(string name,int salary){this.Name = name;this.Salary = salary;}publicvoidSetName(string name){if(! String.IsNullOrEmpty(name)){this.Name = name;}}publicstringGetName(){return Name;}publicvoidSetSalary(int amount){if(amount.GetType()==typeof(int)){this.Salary = amount;}}publicintGetSalary(){return Salary;}}
csharp
Si queremos inicializar nuestro objeto, debemos hacer lo siguiente.
1Developer Daniel =newDeveloper("Szabó Dániel Ernő",100000);
csharp
Ahora podemos usar el GetName para ver la propiedad.
1Console.WriteLine(Daniel.GetName());
csharp
También podríamos usar el SetSalary para cambiar la propiedad.
12Daniel.SetSalary(2000000);Console.WriteLine(Daniel.GetSalary());
csharp
Tenga en cuenta que lo siguiente arrojará un error.
1Daniel.Salario =300000;
csharp
Esto se debe al hecho de que la propiedad es privada y la única manera de modificarla es con la llamada del setter apropiado llamado SetSalary !
C# también diferencia otros tipos de modificadores, que no sólo están ligados a clases sino a diferentes tipos de datos y estructuras.
- resumen
- async
- const
- estático
- sellado…
Para una referencia completa, debe visitar esta documentación ya que esta guía no va a mostrar todo el arsenal.
Interno
Este modificador de acceso asegura que sólo se pueda acceder al objeto dentro de su propio ensamblaje pero no desde otros ensamblajes.
Esto significa una clase como esta:
1234public classInternalDemo{internalint number =99;}
csharp
El código anterior permite el acceso a la propiedad del número del mismo programa/ensamblado. Usarlo desde otro programa te dará un error diciendo «No puede acceder a la propiedad».
Soldado
Estas propiedades sólo pueden ser accedidas dentro de la clase, no hay forma de acceder a ella desde otras clases o fuera de la clase.
12345678910111213classDeveloper{nombre de la cadena privada ="Daniel";}classProgram{estaticvoidMain(string[] args){Desarrollador D =newDeveloper(); Console.WriteLine(D.Name);}}
csharp
La función WriteLine arrojará la excepción que nos notifica la restricción que plantea el modificador de acceso.
Público
Este modificador de acceso hace que la propiedad/método sea accesible a todo el proyecto en el que estamos trabajando. Este es el modificador más flojo y debe ser usado con cuidado.
12345678910111213classPlayer{juego de cuerda pública ="Liga de cohetes";}classProgram{estaticvoidMain(string[] args){Player R =newPlayer(); Console.WriteLine(D.Game);}}
csharp
Protegido
Estos modificadores permiten que el método o la propiedad sea accesible desde dentro de la clase y desde todas las clases que se deriven de esa clase.
123456789101112classDeveloper{protectedstring Name ="Daniel";}classGameDeveloper:Developer{voidPrint(){ Console.WriteLine(Name);}}
csharp
La función WriteLine no tiene ningún problema para acceder a la propiedad según lo proyectado por el uso o el modificador de acceso protegido.
Interno protegido
Se trata de una combinación de modificadores protegidos y internos . Esto significa que sólo podemos acceder al miembro desde dentro del mismo ensamblaje o en una clase derivada en otros ensamblajes o proyectos.
Privado Protegido
Este modificador también es un combinado. Parte de su magia proviene del privado y otra parte proviene de las palabras clave protegidas . Esto nos permite acceder a los miembros dentro de la clase contenedor o en una clase que deriva de una clase contenedor, pero esto está restringido sólo al ensamblaje/proyecto dado.
Sellado
Cuando se aplica esto a una clase se evita que otras clases hereden de ella. Esto también puede aplicarse a métodos o propiedades que anulan un método o una propiedad virtual en la clase base. Esto significa que otras clases pueden derivar de tu clase pero no pueden anular los métodos o propiedades.