sábado, 1 de febrero de 2014

Construcción Sintáctica base en C#

Tabla de Contenido

0. Introducción
1. Construcción Sintáctica base
1.1 Uso básico de base
1.2 Ejemplo más completo
2. Diferencia entre this y base
Conclusiones
Glosario
Enlaces & Literatura

0. Introducción

Bajo el concepto de herencia se introduce, además, otros elementos de construcción sintáctica para el uso de los miembros heredados de un tipo en particular en una jerarquía de herencia en cuestión: me refiero a base. Este es el tema de este artículo, en donde les hablaré acerca del uso de este concepto para acceder a miembros heredados.

1. Construcción Sintáctica base

En lenguaje de programación C# contamos con la palabra clave base [2] que representa la construcción sintáctica que permite al programador especificar el acceso a miembros heredados por un subtipo desde una superclase en una jerarquía de herencia. Los miembros heredados son aquellos que corresponden con modificador de acceso public [9] o protected [8] (este modificador de acceso sólo permite hacer referencia a los miembros desde la misma jerarquía de herencia, y desde luego, internamente en el tipo).

En línea con lo anterior, es importante anunciar que base no está permitido para miembros distintos de instancia, específicamente, estáticos (static [10]).

1.1 Uso básico de base

En el ejemplo que viene a continuación se demuestra el uso básico de la palabra clave base.

Archivo UsoBasicoBase.cs:

La clase ClaseBase define una estructura con los siguientes miembros:

  • ClaseBase (),
  • ClaseBase (int i), y
  • ObtenerValor()
Los dos primeros corresponden con dos firmas de constructores de clase, el tercero, simplemente un método para recuperar el valor del campo de instancia numero.

Hasta aquí, esta clase no introduce ningún concepto nuevo (ya los hemos visto en entregas anteriores). Ahora fijémonos en la clase ClaseDerivada. Los constructores de esta clase, al final de su firma, separado por el token : (dos puntos), y seguido por la construcción sintáctica base se invoca la versión del constructor de la clase base, por ejemplo:

ClaseDerivada() : base()

ClaseDerivada(int i) : base(i)

Cada uno de estos constructores anteriores, invocan las versiones de constructores especificados en la clase ClaseBase.


Como hemos observado la utilidad de la palabra clave base en C# nos permite acceder miembros de una clase base desde el cuerpo de un subtipo. Esto de manera muy intuitiva y fácil.

1.2 Ejemplo más completo

Vamos a implementar la siguiente jerarquía de herencia para demostrar el uso de base a través de un ejemplo más concreto y completo:
Jerarquía de herencia en C#
Figura 1. Jerarquía de herencia en C#.
[Nota: Este ejemplo está adaptado desde [2]]

Archivo Persona.cs:

Esta clase es muy sencilla, sólo se especifican dos campos de instancia, y un método para la obtención de la información de un individuo (persona).

Archivo Empleado.cs:



En las líneas 5-10 se sobreescribe el método ObtenerInformacion de la clase base Persona. Luego en la línea 8 se invoca la versión del anterior método a través de:

base.ObtenerInformacion();

> Prueba de ejecución.


Como ya se observado, y para recalcarlo, basta con seguir esta sintaxis para hacer uso de miembros heredados:

base.MiembroHeredado

2. Diferencia entre base y this

La construcción sintáctica this (Referencia this en C#) básicamente permite al programador contextualizar sobre los miembros pertenecientes a una instancia particular de un tipo de dato, es decir, referirse a funciones locales o del contexto del tipo, así:

this.MiembroContextual

Con MiembroContextual me refiero a cualquiera de los miembros declarados en el cuerpo de un tipo de dato a los que puede acceder una referencia de tal tipo.

Archivo DemoThis.cs:

En el ejemplo previo de código fuente C#, en particular, en la línea 7 (this.x = x;)  se asigna el valor del parámetro x en la variable de instancia homónima.

Mientras tanto, base, como ya se demostró, permite acceder a los miembros (con modificador de acceso public y protected) de una clase base desde una clase derivada.

Conclusiones

A lo largo de este artículo hemos aprendido a usar la construcción sintáctica base para acceder a los miembros heredados. En los constructores, por ejemplo, podemos construir parte del tipo invocando un constructor del tipo base. Al final, presenté la diferencia fundamental entre this y base, el primero funciona a nivel de clase, mientras que el segundo a nivel de la jerarquía de herencia.

Glosario

- base
- Jerarquía de herencia
- Miembro
- this

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]: base (C# Reference) - http://msdn.microsoft.com/en-us/library/vstudio/hfw7t1ce(v=vs.100).aspx
[3]: base Keyword in .Net - Asp.Net, C#, SQL Blog - http://dotnetguts.blogspot.com/2007/07/base-keyword-in-net.html
[4]: base and this keyword in C# | CODE SPREAD - http://www.codespread.com/base-and-this-keyword-in-c.html#.Uu0YGbSnClc
[5]: Classes, Structs, and Objects-base Keyword - Visual C# Developer Center - http://tutorials.csharp-online.net/index.php?title=Classes,_Structs,_and_Objects%e2%80%94base_Keyword
[6]: Base Keyword in C# - http://www.dotnetheaven.com/article/base-keyword-in-csharp
[7]: C# Base Constructor - http://www.dotnetperls.com/base
[8]: protected (C# Reference) - http://msdn.microsoft.com/en-us/library/bcd5672a(v=vs.90).aspx
[9]: public (C# Reference) - http://msdn.microsoft.com/en-us/library/yzh058ae(v=vs.90).aspx
[10]: static (C# Reference) - http://msdn.microsoft.com/en-us/library/98f28cdx.aspx



J

No hay comentarios:

Publicar un comentario

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