¿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:
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.Empty8: For Each c As Char In s
9: If Char.IsNumber(c) Then10: out = String.Concat(out, c.ToString())
11: End If12: Next
13: Return out14: End Function
15:
16: End Module
Podríamos utilizarlo de la siguiente manera:
1: Dim Numero As String = "98732394-Z".ExtraerNumeros()
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