C#: Métodos de extensión

En este artículo vamos a explicar cómo usar los métodos de extensión de C#, una manera muy sencilla de añadir nueva funcionalidad extra a las clases ya existentes (ya sean creadas por nosotros o incluídas en nuestro framework) sin necesidad de tener que derivar (heredar) de ellas.

¿Qué quiere decir esto? Imaginemos que, por ejemplo, necesitamos resetear los valores del componente transform de un objeto de nuestro juego. Para ello implementaríamos algunas líneas de código que se encargasen de acceder al componente transform de nuestro GameObject y modificar sus atributos “position“, “localRotation” y “localScale“, algo así como esto:


miObjeto.transform.position = Vector3.zero;
miObjeto.transform.localRotation = Quaternion.identity;
miObjeto.transform.localScale = new Vector3(1, 1, 1);

Ahora imaginemos que, además, queremos que este código sea incluído dentro de un método llamado “ResetTransformValues()” y que éste sea incluído como un método público más de la clase GameObject para que así pudiéramos disponer de él en cada variable de tipo GameObject en cualquiera de nuestros scripts. Según las enseñanzas de la programación orientada a objetos, lo más adecuado sería crearnos una nueva clase que herede de la clase GameObject y añadirle nuestro método. Bien, pues aquí es donde nos será de gran utilidad el uso de los métodos de extensión ya que nos permitirán añadir funcionalidad a cualquier clase sin necesidad de tener que heredar.

Veamos cómo crear nuestro método de extensión en este caso:


public static class MyExtensions
{
   public static void ResetTransformValues(this GameObject obj)
   {
      obj.transform.position = Vector3.zero;
      obj.transform.localRotation = Quaternion.identity;
      obj.transform.localScale = new Vector3(1, 1, 1);
   }
}

Como vemos, hemos creado una clase estática llamada “MyExtensions” donde hemos metido nuestro método de extensión, pero podremos añadir tantos métodos como queramos. Sería como nuestro “repositorio” de extensiones.

La única particularidad que tendrán los métodos de extensión será que deben declararse como estáticos y el modo de declarar su firma será siempre escribiendo la palabra “this” seguida del nombre de la clase que queramos extender. De este modo estaremos indicando que el método sea añadido como uno más de la clase indicada (en este caso de la clase GameObject) y por tanto, a partir de ese momento, podremos hacer uso de él en cualquier parte de nuestro código del siguiente modo:


miObjeto.ResetTransformValues();

Como podemos ver, la llamada a cualquiera de nuestros métodos de extensión se realiza del mismo modo que con cualquiera de los métodos públicos incluidos de por sí en la clase que hemos extendido.

¡Eso es todo! Os animo a que hagáis uso de ello a partir de ahora, sobre todo para métodos que necesitéis llamar muchas veces en diferentes partes de vuestro juego, ya que os ahorrará trabajo y le dará elegancia a vuestro código 😉

Anuncios

3 comentarios en “C#: Métodos de extensión

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s