Métodos de Extensión .NET
Métodos de Extensión .NET[editar]
Los Métodos de Extensión son métodos (funciones o procedimientos) que pueden ser agregados a una clase sin necesidad de compilar nuevamente o de reemplazar los métodos originales de dicha clase. En .NET, los métodos de extensión permiten agregar nuevas funcionalidades a instancias de clases sin necesidad de compliar las clases bases.
Implementación[editar]
Para explicar el uso de los métodos de extensión en .NET, se utilizará el lenguaje de programación Visual Basic en el entorno de desarrollo Visual Studio 2010
Paso 1: Creación del módulo para los métodos de extensión.[editar]
Los métodos de extensión se construyen en un módulo perteneciente al proyecto en el cual serán usados. Para ello, agregamos un nuevo módulo al proyecto siguiendo estos pasos:
- En el cuadro "Explorador de Soluciones" (parte derecha de la pantalla) damos clic derecho sobre el nombre del proyecto.
- En el menú desplegable, buscamos la opción "Agregar" y en el submenú que se despliega seleccionamos "Módulo".
- En la nueva ventana que aparece, damos un nombre a nuestro módulo y luego damos clic en "Agregar".
Paso 2: Importación de las librerías del Framework necesarias[editar]
Luego de tener nuestro módulo, se importa la siguiente librería para hacer uso de las clases del Framework que nos permiten construir los métodos de extensión para el proyecto.
Imports System.Runtime.CompilerServices
Paso 3: Construcción del método.[editar]
Un método de extensión siempre debe llevar una variable de entrada que indicará la clase en la cual se incluirá el método.
Por ejemplo, si al método de extensión que creamos enviamos una variable de tipo String
como entrada, entonces el método será añadido a la clase String
y todas las instancias que pertenezcan a la clase podrán usar el método.
Para construir el método, dentro de la región de código del módulo creamos un procedimiento antecediendolo de la instrucción <Extension()> _
de la siguiente manera:
Module [NombreModulo]
<Extension()> _
Sub [NombreProcedimiento]([NombreObjeto] As [TipoObjeto]
''(Funcionalidad del método)''
End Sub
End Module
De ésta manera, se pueden implementar métodos de extensión en .NET permitiendo así agregar nuevas funcionalidades a las clases del Framework sin necesidad de compilarlas nuevamente.
Ejemplo[editar]
En el siguiente ejemplo se creará un método de extensión para la clase TextBox que permita validar si una cadena ingresada en un control "TextBox" es numérica.
Nota: Para realizar el ejemplo, crearemos un procedimiento más que será el evento KeyPress de las cajas de texto.
¿Qué necesitamos?
- Crear un nuevo módulo dentro del proyecto.
- Importamos las librerías necesarias del Framework para construir métodos de extensión
Imports System.Runtime.CompilerServices
- Creamos el método a usar
Module MetodosExtension
<Extension()> _
Sub EsNumerico(Control As TextBox
...
End Sub
End Module
- Creamos el evento "KeyPress" (necesario en el ejemplo)
Module MetodosExtension
<Extension()> _
Sub EsNumerico(Control As TextBox
...
End Sub
Private Sub Evento_SoloNumeros(Sender As Object, e As KeyPressEventArgs
Dim _caracterEntrada As String = ""
_caracterEntrada = e.KeyChar
If Not IsNumeric(_caracterEntrada ) And e.KeyChar <> Chr(8) Then e.KeyChar = ""
End Sub
End Module
- Usamos el evento "KeyPress" en el método de extensión anclando al objeto de la variable de entrada el evento que acabamos de construir
Module MetodosExtension
<Extension()> _
Sub EsNumerico(Control As TextBox)
AddHandler Control.KeyPress, AddressOf Evento_SoloNumeros
End Sub
Private Sub Evento_SoloNumeros(Sender As Object, e As KeyPressEventArgs)
Dim _caracterEntrada As String = ""
_caracterEntrada = e.KeyChar
If Not IsNumeric(_caracterEntrada ) And e.KeyChar <> Chr(8) Then e.KeyChar = ""
End Sub
End Module
Código completo[editar]
Imports System.Runtime.CompilerServices
Module MetodosExtension
<Extension()> _
Sub EsNumerico(Control As TextBox)
AddHandler Control.KeyPress, AddressOf Evento_SoloNumeros
End Sub
Private Sub Evento_SoloNumeros(Sender As Object, e As KeyPressEventArgs)
Dim _caracterEntrada As String = ""
_caracterEntrada = e.KeyChar
If Not IsNumeric(_caracterEntrada ) And e.KeyChar <> Chr(8) Then e.KeyChar = ""
End Sub
End Module
Para usar el método de extensión, basta con llamarlo desde un control TextBox en cualquier formulario del proyecto de la siguiente manera: TexBox1.EsNumerico()
Conclusión[editar]
Como podemos ver, los métodos de extensión son muy útiles al momento de agregar funcionalidad a las clases de nuestros proyectos de una manera rápida y sencilla. Hay que tener en cuenta que los métodos de extensión se deben usar cuando sea necesario y no caer en el error de usarlos a todo momento sin tener claro su propósito.