Saltar al contenido

Modificar las clases con estilo

Hay básicamente seis niveles de accesibilidad:

  1. Público
  2. Protegido
  3. Interna
  4. Soldado
  5. Interno protegido
  6. 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 .

Modificar las clases con estilo
Modificar las clases con estilo

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.

  1. resumen
  2. async
  3. const
  4. estático
  5. 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.