
Clique aqui para ler todos os artigos desta edição
Criando Add-ins
Convertendo código C# em Visual Basic.NET
|
Este artigo discute |
Este artigo usa as seguintes tecnologias |
|
· Criação de Add-ins para o IDE do Visual Studio; · Conversão de código C# para Visual Basic.NET; · Usando testes unitários; · Adicionando itens de menu no Visual Studio. |
· Visual Studio 2005, Visual Basic .NET; |
|
Chapéu: Visual Studio |
Download: PasteAs.exe |
Scott Swigart
A funcionalidade Paste As (“Colar como” ou “Colar especial”) tipo a existente em aplicações Microsoft Word, tornou-se indispensável para mim. Freqüentemente, copio algo da Web e quero colar em um documento sem a formatação HTML. A opção Paste As é a mais indicada para essa tarefa.
Um dia desses, procurando um exemplo de código na Web, ocorreu-me que o Paste As também seria útil para o Visual Studio. Porém, em vez de simplesmente converter o texto formatado, poderíamos converter a linguagem do código de exemplo. É bastante comum codificarmos em C# e procurarmos um exemplo Visual Basic que faça exatamente o que desejamos (ou vice-versa). Para utilizarmos tal código, precisamos copiar o exemplo para a área de transferência, ir para um dos muitos bons sites da Web para conversão de código, colar o código, convertê-lo, copiar o novo código e finalmente colá-lo no Visual Studio.
Quando encontro um exemplo de código C# em um site da Web, o que realmente gostaria seria eliminar esses passos intermediários na conversão e apenas “colar” o código já convertido, direto no editor. Todos os pré-requisitos e funcionalidades necessárias para fazer esse trabalho já existem; apenas precisamos de algum código para juntá-las.
Existem vários conversores de código disponíveis e que podem ser acessados a partir de um browser, porém preferi projetar o Paste As Visual Basic como um Add-in para o IDE, de forma que o usuário possa escolher o conversor que deseja utilizar. Quando estivermos trabalhando com soluções Web, não temos nenhuma garantia de que um determinado site permanecerá operacional indefinidamente, ou que não mudará sua implementação de modo a quebrar nosso código. Se utilizarmos mais de um serviço de conversão, tornamos mais provável a existência de um serviço válido e disponível para executar a conversão. Por outro lado, conversores de código diferentes utilizam algoritmos diferentes e podem trabalhar um melhor que o outro dependendo da situação. Finalmente, quis torná-lo fácil de usar como um Add-in, para suportar conversores adicionais no futuro.
Para abstrair a implementação do conversor do resto do código, fiz a interface IConvertCode. Isso descreve a operação de conversão em geral, mas deixa a implementação específica para outras classes. A interface IConvertCode é bem simples:
Public Interface IConvertCode
Function Convert(ByVal csCode As String) As String
ReadOnly Property ConverterName() As String
End Interface
O método Convert usa código C# como um argumento string e retorna código Visual Basic como um string. A propriedade ConverterName retorna o nome do conversor, de forma que o usuário possa escolher aquele que gostaria de utilizar.
A primeira implementação dessa interface utiliza o Web Service de conversão C# para VB, de Kamal Patel, atualmente disponível em http://kamalpatel.net/ConvertCSharp2VB.aspx. Uma vez que uma referência a esse serviço é adicionada, o código de chamada é bem direto, como mostrado na Listagem 1.
Listagem 1. Chamando um Web Service de conversão
Public Class WSConvert
Implements IConvertCode
Public Function Convert(ByVal csCode As String) As String _
Implements IConvertCode.Convert
Dim codeConverter As _
New CSToVBWebService.ConvertCSharp2VBService()
Return codeConverter.Execute(csCode)
End Function
Public ReadOnly Property ConverterName() As String _
Implements IConvertCode.ConverterName
Get
...