Métodos de Extensión .NET

De Wikiversidad

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.