martes, 8 de octubre de 2013

Referencia this en C#

Tabla de Contenido

0. Introducción
1. Referencia this
2. Cuándo Usar la Referencia this
3. Calificación de Miembros Homónimos
4. Contexto Estático
5. Conclusiones
6. Glosario
7. Referencias

0. Introducción

En esta oportunidad les presento otro de los elementos de construcción del lenguaje de programación C#: la referencia this. Esencialmente esta referencia, valga el pleonasmo, permite al programador referenciar cualquier de los miembros de una clase: método, propiedad, campo, etc. Veremos en qué contextos es apropiado el uso de la referencia this, su uso también en la calificación de miembros homónimos, y la inhibición de su uso en métodos estáticos.

1. Referencia this

Con la referencia this [1] el programador de C# puede hacer referirse a miembros de la clase que esté implementando. En [2] he encontrado un ejemplo muy práctico sobre el uso de esta palabra clave de C#:


Archivo C# Panda.cs [enlace alternativo]:  
En la línea 4 se declara un objeto del mismo tipo de la clase Panda (composición [3]): Pareja. Esta propiedad va a contener una referencia al objeto que será la pareja de la instancia actual.


Continuando, en las líneas 8 y 9 sucede dos cosas:

  1. La pareja de la instancia actual será el objeto que se pase como argumento al método Relacionarse.
  2. La referencia que se pasa como argumento se apareará con el objeto actual. Obsérvese el uso de la palabra clave this. Su significado en este contexto es como sigue:

    El objeto actual será la pareja del objeto Panda que se ha pasado como argumento al método Relacionarse.
En la clase cliente sucede lo siguiente:

Archivo C# PruebaPanda.cs [enlace alternativo]:
Se crean dos objetos de la clase Panda se asigna el valor para el nombre cada uno de éstos. En la línea 8 se crea la relación bidireccional, en términos más cotidianos: se aparean.

2. Cuándo Usar la Referencia this

En [4] hay un resumen acerca de los contextos en donde es permisible el uso de la referencia de this:
  • Campos de instancia eclipsados por variables locales (más acerca de este caso en el punto 3).
  • Pasarse en sí mismo un objeto como argumento de un método.
  • Devolverse como valor de un método.
  • Declaración de índeces (en artículos posteriores veremos más acerca de este tema).
  • Declaración de métodos de extensión (veremos este tema en artículos posteriores).
  • Pasar argumentos entre constructores sobrecargados.

4. Calificación de Miembros de Instancia Homónimos

Se refiere a los miembros de instancia, en particular campos que tienen el mimo nombre que variables locales en métodos. Veamos:

public AdministradorTI (string nombre, string email)
{
this.nombre = nombre;
this.email = email;
}

En las sentencias del constructor AdministradorTI se califica los campos nombre y email por medio de la referencia thisSi en en lo de lo anterior hubiéramos hecho esto:

public AdministradorTI (string nombre, string email)
{
nombre = nombre;
email = email;
}

Las dos sentencias corresponden con lo que se conoce como asignacion reduntate.

4. Contexto Estático

En C# el uso de la referencia this no está permitido. Si intentamos hacerlo:

public static void VerInstanciasCreadas()
{
Console.WriteLine ("Número de pandas creados: " + numeroPandasCreados);
this.Relacionarse(new Panda ("Ross"));
}

error CS0026: Keyword `this' is not valid in a static property, static method, or static field initializer

5. Conclusiones

Hemos recorrido la utilidad de la referencia this: su concepto, situaciones donde debemos utilizarla, como refererirnos a miembros de instancia (en particular, campos). Al final vimos que en los métodos estáticos no está permitido el uso de la referencia this.

6. Glosario

  • Asignación redundante
  • this

Referencias

[1]: this (C# Reference) - http://msdn.microsoft.com/en-us/library/dk1507sz.aspx
[2]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[3]: Introduction to Object Oriented Programming Concepts (OOP) and More - CodeProject - http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep
[4]: c# - When do you use the "this" keyword? - Stack Overflow - http://stackoverflow.com/questions/23250/when-do-you-use-the-this-keyword


O

No hay comentarios:

Publicar un comentario

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