domingo, 27 de abril de 2014

Modificadores de Acceso en C#

Tabla de Contenido

0. Introducción
1. 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:


En las líneas 19-20 se declaran los miembros de instancia (xy) 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.

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:


Obsérvese en la línea 15 la especificación del modificador de acceso internal.

Compilación:


  1. csc /target:library ModificadorAccesointernal.cs

Archivo ModificadorAccesointernal2.cs:



Compilación:


  1. csc /t:exe /reference:ModificadorAccesointernal.dll ModificadorAccesointernal2.cs

Error:
Error uso de clase con internal.
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:

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-.

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:


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:

  1. csc /target:library ModificadorAccesoprotectedinternal.cs


Compilación:

  1. csc /target:library /reference:ModificadorAccesoprotectedinternal.dll ModificadorAccesoprotectedinternal2.cs

Error:
Error acceso miembro protected internal desde assembly exterior.
Figura 2. Error acceso miembro protected internal desde assembly exterior.

Eric Lippert [10] agrega [1] a esta unión de protected e internal:
Eric Lippert acerca de protected 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

1 comentario:

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.