Extension Methods em VB.NET


Semana passada um aluno me perguntou como ele deveria proceder para criar um Extesion Method no Visual Basic .NET (Orcas). Ao contrário do C#, o Visual Basic .NET 9.0 necessita que o método estático a ser uma extensão de um determinado tipo, seja decorado com um atributo chamado ExtensionAttribute, que está contido dentro do namespace System.Runtime.CompilerServices (Assembly System.Core.dll). O exemplo abaixo mostra a sua utilização:

Imports System.Runtime.CompilerServices

Module Helper
    <Extension()> _
    Public Function RecuperaCincoPrimeiros(ByVal value As String) As String
        Return value.Substring(0, 5)
    End Function
End Module

Module Module1
    Sub Main()
        Dim valor As String = “1234567890”
        Console.WriteLine(valor.RecuperaCincoPrimeiros())
    End Sub
End Module

A única coisa que não gostei é que todo extesion method deve, obrigatoriamente, ser definido dentro de um módulo. Não sei porque a Microsoft não permite a criação de extension method dentro de uma classe, pois um módulo, depois de compilado, não deixa de ser uma classe concreta (NotInheritable), com todos os membros estáticos (Shared).

Na verdade, custa-me a acreditar que um módulo do VB.NET é equivalente a uma classe estática do C#. Imaginei que a Microsoft iria manter os módulos apenas por uma questão de compatibilidade com o VB6, mas está indo muito além disso…

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s