Tabla de Contenido
0. Introducción1. public
2. internal
3. private
4. protected
5. protected internal
6. Datos Adicionales acerca de Modificadores de Acceso
7. Conclusiones
8. Glosario
9. Enlaces & Literatura
0. Introducción
La
programación orientada objetos descansa sobre 4 pilares fundamentales:
encapsulación, herencia, abstracción, y polimorfismo. En el caso particular, el de la encapsulación, este mecanismo permite
definir estructuras con funciones específicas en su interior como hacia el
exterior (esta es la parte que le interesa a las secciones de código cliente).
Veremos que las construcciones en el lenguaje C# permiten concebir este mecanismo, son los modificadores de acceso. Así
mismo, tendremos la oportunidad definir el ámbito de cada uno, y cómo afectan
la definición de tipos en el modelo del mundo problema. ¡Empecemos!
1. public
El modificador de acceso public [2] permite acceder a todos los tipos y miembros tipo. Sinónimo de acceso total. Es, además, el modificador de acceso para miembros de una enumeración (enum [3]) e interfaces.
Procedamos con un ejemplo:
Archivo ModificadorAccesopublic.cs:
En las líneas 19-20 se declaran los miembros de instancia (x, y) con el modificador de acceso public. Esto va a permitir que desde código cliente se acceda directamente a estos dos miembros. (Esto último no es aconsejable, pues va en contra del mecanismo de encapsulación en lo que respecta a campos de instancia. Éstos deben ser manipulados por propiedades o métodos public).
> Prueba de ejecución.
Archivo ModificadorAccesointernal2.cs:
Compilación:
Error:
Procedamos con un ejemplo:
Archivo ModificadorAccesoprivate.cs:
En las líneas 19-20 se decalaran los miembros campo nombre y salario con el modificador de acceso private, esto significa que sólo podrán manipularse desde código interno de la clase -Empleado-.
> Prueba de ejecución.
2. internal
Aplica tanto para tipos y miembros de clase (campos, propiedades, indexers, métodos). Los tipos o miembros de clase marcados con internal [4] son accesibles por los demás artefactos definidos en el mismo assembly (o friend assemblies [1]). Es el modificador de acceso para para los tipos de primer orden (o no anidados).
Ejemplo:
Archivo ModificadorAccesointernal.cs:
Obsérvese en la línea 15 la especificación del modificador de acceso internal.
Compilación:
- csc /target:library ModificadorAccesointernal.cs
Archivo ModificadorAccesointernal2.cs:
Compilación:
- csc /t:exe /reference:ModificadorAccesointernal.dll ModificadorAccesointernal2.cs
Error:
Figura 1. Error al referenciar clase internal en assembly exterior. |
3. private
Especifica tipos y miembros con el nivel de privacidad más alto. El más restrictivo. Además, private [5] el modificador de acceso predeterminado para los miembros de una clase o un struct -cfr. Structs en C#-.Procedamos con un ejemplo:
Archivo ModificadorAccesoprivate.cs:
4. protected
El modificador de acceso protected [7] es apropiado para una jerarquía de herencia, dado que sólo miembros de la clase base estarán disponibles para sus subclases; e inclusive para el cuerpo de declaración de la primera.
Ejemplo:
Archivo ModificadorAccesoprotected.cs:
5. protected internal
Este es el única combinación de modificadores de acceso posible en el lenguaje de programación C#. protected internal [8] para miembros de una clase permite que sólo clases definidas dentro de un assembly (ensamblado) tengan acceso a estos miembros.
Ejemplo:
Compilación:
- csc /target:library ModificadorAccesoprotectedinternal.cs
Compilación:
- csc /target:library /reference:ModificadorAccesoprotectedinternal.dll ModificadorAccesoprotectedinternal2.cs
Eric Lippert [10] agrega [1] a esta unión de protected e internal:
Figura 3. Eric Lippert acerca de protected internal [1]. |
6. Datos Adicionales acerca de Modificadores de Acceso
Acerca de la intersección de protected e internal en C#:Figura 4. Intersección protected e internal no implementada por C# [1]. |
7. Conclusiones
Realizamos un recorrido por los diferentes modificadores de acceso disponibles en C#: public, internal, private, protected, y la intersección protected e internal. El uso apropiado de estas construcciones del lenguaje permiten concebir el mecanismo de encapsulación de la programación orientada objetos en C#.
8. Glosario
- Acceso
- Encapsulación
- Intersección
- Modificador de acceso
- Programación orientada a objetos
9. Enlaces & Literatura
[1]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.[2]: public (C# Reference) - http://msdn.microsoft.com/en-us/library/yzh058ae.aspx
[3]: enum (C# Reference) - http://msdn.microsoft.com/en-us/library/sbbt4032.aspx
[4]: internal (C# Reference) - http://msdn.microsoft.com/en-us/library/vstudio/7c5ka91b%28v=vs.110%29.aspx
[5]: private (C# Reference) - http://msdn.microsoft.com/en-us/library/st6sy9xe.aspx
[6]: Structs en C# - http://ortizol.blogspot.com/2014/04/structs-en-c.html
[7]: protected (C# Reference) - http://msdn.microsoft.com/en-us/library/bcd5672a.aspx
[8]: Access Modifiers (C# Programming Guide) - http://technet.microsoft.com/en-us/windowsserver/ms173121%28v=vs.96%29.aspx
[9]: C# Protected Internal | .NET Tips and Tricks - http://kossovsky.net/index.php/2009/06/cshar-protected-internal/
[10]: Fabolous Adventures In Coding | Eric Lippert's blog - http://www.ericlippert.com
J
Muy buena información , me sirvio mucho.
ResponderEliminarGracias :v