Comparando VB6 com VB.NET
Este artigo descreve algumas das muitas diferenças entre o VB6 e o VB.NET. Muita coisa feita em VB6 pode não rodar no VB.NET devido a alterações da sintaxe da linguagem.
O VB.NET inclui uma ferramenta para ajudar a migração de projetos do VB6 para o VB.NET que lista os problemas ocorridos durante a migração incluindo comentários no código migrado e itens TODO que indicam as mudanças que deverão ser feitas por você.
Apesar disto se você tiver uma melhor compreensão das principais mudanças ocorridas entre as versões a migração vai ficar menos traumática.
Além das alterações que irei mencionar neste artigo existem muitas diferenças fundamentais entre o VB6 e o VB.NET devido aos novos conceitos de programação incorporados na plataforma .NET.
Dentre posso mencionar : polimorfismo , herança , encapsulamento , sobrecarga , sobrescrita , construtores.
Então vamos ao que interessa...
Passagem de parâmetros
No VB6 , e versões anteriores , o padrão da passagem de parâmetros é feita por referência ou ByRef. quando o tipo de dados dos parâmetros é intrínseco a um Integer, Long, Boolean , String , etc.
No VB.NET todos os parâmetros são passado por valor ou ByVal.
O VB6 suporta também a passagem de parâmetros de forma opcional , onde você define parâmetros do tipo variant para uma rotina como sendo optional e não requerido. O código na rotina que verifica se o parâmetro contém um valor é feito pela palavra-chave IsMissing:
Function fDobro (Optional A)
If IsMissing(A) Then
fDobro = Nul
Else
fDobro = A * 2
End If
O VB.NET não suporta a palavra-chave IsMissing , desta forma você sempre terá que atribuir um valor padrão ao parâmetro opcional:
Function fDouble (Optiona A = 0)
Declaração de variáveis
O VB.NET não suporta o tipo de
dados Variant.
Sempre declare variáveis em linhas separadas
Dim Var1
As Long
DIm Var2 As Long
No VB6 se você fizer a declaração acima em uma linha terá:
Dim Var1 , Var2 As Long
Isto declara a variável Var2 como Long e Var1 como Variant que não é suportada pelo VB.NET
Tipos de Dados
O VB.NET usa um runtime comum entre as linguagens do VS.NET , por isto os tipos de dados no VB6 sofreram alterações. Abaixo temos alguns tipos de dados comparados entre as duas linguagens:
VB6 | VB.NET | Comentário |
Integer | Short | 16 bits |
Long | Integer | 32 bits |
N/A | Long | 64 bits |
Variant | N/A | Usa o novo tipo de dados Object |
Currency | N/A | Use Decimal em VB6 ou Decimal ou Long em VB.NET |
N/A | Decimal | Disponível em VB6 ; nativo em VB.NET |
String | String | VB.NET não suporta strings de comprimento fixo. |
O VB.NET não suporta mais os tipos de dados Variant e Currency.
No VB.NET substitua Variant por Object e Currency por Long ou Decimal.
No VB6 você também pode usar o tipo de dados Decimal . Embora você não consiga declarar uma variável como decimal , você pode declará-la como Variant e então usar a função cDec para fazer a conversão.
Utilização de APIs
Muitas APIs que tomam argumentos numéricos esperam valores de 32-bits.
No VB6 isto representa o tipo de dados Long.
No VB.NET um long possui 64-bits e não irá funcionar com as chamadas de API 32-bit.
No VB.NET os parâmetros usados nas APIs terão que ser substituídos ou convertidos (Cast) para o tipo de dados Integer antes de chamar a API.
Além disto muitas APIs não funcionarão e outras terão que ser substituídas.
Comandos Não suportados
O VB.NET não suporta mais as funções : VarPtr, ObjTr e StrPtr que retornavam o endereço de memória de variáveis. (Você chegou a usar algumas delas?).
Não suporta também os comando Lset usados para converter um tipo definido pelo usuário em outro.
Algumas palavras chaves que não existem mais são :: GoSub, Let, Is Missing, DefBool, DefByte, DefLng, DefCur, DefSng, DefDbl, DefDec, DefDate, DefStr, DefObj , On x Goto e DefVar.
Abaixo os comandos que foram substituídos:
VB6 | Namespace VB.NET | Método / Propriedade |
Circle | System.Drawing.Graphics | DrawEllipse |
Line | System.Drawing.Graphics | DrawLine |
Atn | System.Math | Atan |
Sgn | System.Math | Sign |
Sqr | System.Math | Sqrt |
Lset | System.String | PadRight |
Rset | System.String | PadLeft |
Rnd | Microsoft.VisualBasic.Compatibility.VB6 | Rnd |
Round | Microsoft.VisualBasic.Compatibility.VB6 | Round |
DoEvents | System.Winform.Application | DoEvents |
VarType | System.Object | GetType (retorna um objeto do tipo da classe o qual tem propriedades para obter informação.) |
O comando Set não é mais suportado
Não é mais suportado no VB.NET Nova forma de utilização Set objObjeto = objOutroObjeto objObjeto = objOutroObjeto O comando Debug foi alterado:
Forma usada no VB6 Nova forma de utilização Debug.Print Debug.Write
Debug.WriteLine
Arrays
A declaração de vetores no VB6 era feita assim:
Dim Itens(5) As String
Isto fornece 6 elementos itens com índice de zero até cinco: Itens(0) , Itens(1) , Itens(2) , Itens(3), Itens(4) , Itens(5)
A mesma declaração no VB.NET irá lhe fornecer 5 elementos com índice de zero até 4 : Itens(0) , Itens(1) , Itens(2) , Itens(3), Itens(4).
Propriedades Default
No VB6 podíamos referenciar a propriedade padrão de um controle ou objeto sem especificar o nome da propriedade. Assim podemos fazer:
txtMeuTexto = "Ola Pessoal"
rst!("nome") = "Macoratti"
rst!nome = "Macoratti"
No VB.NET isto não é permitido , você tem que especificar o nome da propriedade:
txtMeuTexto.text = "Ola Pessoal"
rst!("nome").value = "Macoratti"
rst!nome.value = "Macoratti"
Propriedades Let e Get
A sintaxe para as propriedades Let e Get usadas em procedimentos definidos pelo usuário foi alterado. Veja como ficou:
VB6 | VB.NET |
Property Get MinhaPropriedade() As
Integer MinhaPropriedade = m_MinhaPropriedade End Property Property Let MinhaPropriedade(NewValue As Integer) m_MinhaPropriedade = NewValue End Property |
|
ligação Tardia (Late Binding)
Ao atualizar um projeto VB6 para VB.NET a ferramenta de atualização tenta converter referências feitas de propriedades e métodos obsoletas de objetos para as novas usadas no VB.NET:
Dim o As Object
Set o = Me.Label1
o.Label1 = "Nome:"
o.Label1.Caption = "Nome:"
Em ambas declarações estou definindo a propriedades caption do controle Label1 para "Nome.".
No VB.NET não existe mais a propriedade caption ela é agora a propriedade Text.
Como o objeto foi declarado usando a ligação tardia (late Binding) o assistente de migração não sabe que tipo de objeto 'o' se refere e não pode atualizar o código.
Para que a atualização seja possível você deve usar a ligação precoce (Early Binding) :
Dim o As Label
Set o = Me.Label1
o.Label1.Caption = "Nome:"
Operações Lógicas
Os operadores Not , And e Or funcionam de forma diferente no VB.NET.
No VB6 e versões anteriores estas funções realizavam operações lógicas e operações de BitWise dependendo do contexto de utilização. Se todos os operandos fossem to tipo Boolean eles realizavam operações lógicas caso contrário realizavam operações de BitWise.
No VB.NET estes operadores irão realizar somente operações lógicas. O VB.NET introduziu as palavras-chave : BitAnd , BitOr, BitNot e BitXor para realizar operações de bitwise.
Se o seu código VB6 utiliza operadores com valores não booleanos a conversão poderá gerar resultados incorretos.
Ponto final. Aguarde mais artigos sobre VB.NET ...
Veja os
Destaques e novidades do
SUPER DVD Visual Basic (sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#. Veja também os Cursos com vídeo aulas e projetos exemplos: |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: