viernes, 5 de febrero de 2010

Métodos de extensión para VB.NET

¿Habéis utilizado alguna vez los Métodos de extensión? Es una de las novedades que incorporaba el ya viejo Visual Studio 2008 para VB.NET pero que te permite añadir funcionalidad a clases ya existentes sin necesidad de tener que usar herencia o polimorfismo. Imagínate que necesitas una función que "limpie" un String y sólo deje los números y elimine letras, signos de puntuación, etc. ¡La típica función para extraer números de matrículas y de NIF!
Para implementar dicha funcionalidad normalmente crearíamos una clase que tuviera este método y la iríamos instanciando donde la necesitáramos. Un paso más allá cogeríamos ese método y lo marcaríamos como Shared para tener así un método de clase y evitar así tener que crear la instancia de la clase para llamarlo.
Pues si creamos un método de extensión como este:
   1: Imports System.Runtime.CompilerServices
   2:  
   3: Module Extensions
   4:  
   5:     <Extension()> _
   6:     Public Function ExtraerNumeros(ByVal s As String) As String
   7:         Dim out As String = String.Empty
8: For Each c As Char In s
   9:             If Char.IsNumber(c) Then
10: out = String.Concat(out, c.ToString())
  11:             End If
12: Next
  13:         Return out
14: End Function
  15:  
  16: End Module

Podríamos utilizarlo de la siguiente manera:
1: Dim Numero As String = "98732394-Z".ExtraerNumeros()
Ahora cualquier String que tengáis en vuestra aplicación tendrá ese método como propio.

Nota: Si queréis crear un método de extensión que lo puedan utilizar todas las clases sólo tenéis que pasar como referencia un Object

Haciendo pruebas en Visual Studio 2008 no he conseguido extender un método contra el tipo Object.
Continuará ...

No hay comentarios:

Publicar un comentario