Cómo escribir un método de extensión (Visual Basic)

Los métodos de extensión permiten agregar métodos a una clase existente. Se puede llamar al método de extensión como si fuera una instancia de esa clase.

Para definir un método de extensión

  1. Abra una aplicación de Visual Basic nueva o existente en Visual Studio.

  2. En la parte superior del archivo en el que desea definir un método de extensión, incluya la siguiente instrucción de importación:

    Imports System.Runtime.CompilerServices
    
  3. Dentro de un módulo de la aplicación nueva o existente, comience la definición del método con el atributo <Extension>:

    <Extension()>
    

    Tenga en cuenta que el atributo Extension solo se puede aplicar a un método (un procedimiento Sub o Function ) en un módulo de Visual Basic. Si lo aplica a un método en Class o en Structure, el compilador de Visual Basic genera el error BC36551, "Los métodos de extensión solo se pueden definir en módulos".

  4. Declare el método de la forma habitual, con la excepción de que el tipo del primer parámetro debe ser el tipo de datos que desea extender.

    <Extension()>
    Public Sub SubName(para1 As ExtendedType, <other parameters>)
         ' < Body of the method >
    End Sub
    

Ejemplo

En el ejemplo siguiente se declara un método de extensión en el módulo StringExtensions. Un segundo módulo, Module1, importa StringExtensions y llama al método. El método de extensión debe estar en el ámbito cuando se le llama. El método de extensión PrintAndPunctuate extiende la clase String con un método que muestra la instancia de cadena, seguida de una cadena de símbolos de puntuación enviados en forma de parámetro.

' Declarations will typically be in a separate module.
Imports System.Runtime.CompilerServices

Module StringExtensions
    <Extension()>
    Public Sub PrintAndPunctuate(aString As String, punc As String)
        Console.WriteLine(aString & punc)
    End Sub

End Module
' Import the module that holds the extension method you want to use,
' and call it.

Imports ConsoleApplication2.StringExtensions

Module Module1

    Sub Main()
        Dim example = "Hello"
        example.PrintAndPunctuate("?")
        example.PrintAndPunctuate("!!!!")
    End Sub

End Module

Observe que el método se define con dos parámetros y se le llama solo con uno. El primer parámetro, aString, de las definiciones de método anteriores está enlazado a example, la instancia de String que llama al método. El resultado del ejemplo es el siguiente:

Hello?
Hello!!!!

Consulte también