VB-NET 1

Embed Size (px)

Citation preview

IntroduoPorque VB .NET e no C#? Muito se tem escrito sobre a nova linguagem que a Microsoft criou C# (pronuncia-se "C-Sharp"). Esta uma nova linguagem baseada no C/C+ +. O C#, como o VB.Net, construdo especificamente para a estrutura .NET (.NET Framework), e muito se tem escrito sobre ela. Dada toda a propaganda, algumas pessoas se perguntam sobre o porqu de escolher VB .NET em lugar de C#. Embora tanto os projetos VB .NET como C# sejam criados no ambiente do Visual Studio .NET, o VB .NET foi criado especificamente para os desenvolvedores de VB e tem um nmero de caractersticas nicas que o fazem uma grande escolha para criar aplicaes .NET. VB .NET ainda a nica linguagem no VS .NET que inclui compilao em segundo plano, o que quer dizer que pode sinalizar os erros imediatamente enquanto voc digita. VB .NET a nica linguagem .NET que suporta ligao tardia, isto o que voc faz quando declara uma varivel do tipo Object no VB 6. No ambiente de trabalho do VS .NET, o VB .NET oferece uma lista do tipo drop-down no topo da janela de cdigo com todos os objetos e eventos. O ambiente do VS .NET no oferece esta funcionalidade para nenhuma das outras linguagens. O VB .NET tambm a nica a fornecer valores default para parmetros opcionais e a ter uma coleo Controls disponvel para o desenvolvedor. No esquea tambm que o C#, assim como seus irmos C e C++, diferencia maisculas de minsculas, algo que deixa os programadores mais experientes em VB completamente loucos. Some-se a isto que o C# usa diferentes smbolos para o operador de atribuio (=) e o operador de comparao de igualdade (==). Finalmente, consideremos, se voc sabe VB, voc est a meio caminho de dominar o VB .NET do que estaria para dominar o C#. Mesmo tendo mudado muitas coisas, a sintaxe bsica da linguagem do VB .NET continua semelhante do VB, assim voc j sabe como declarar variveis, criar loops, e assim por diante. Como voc pode ver, o VB .NET tem algumas vantagens sobre as demais linguagens .NET. Se voc est curioso para saber mais sobre estas vantagens, voc deve seguir este curso. A quem se destina este curso?Este curso se destina a programadores de VB atuais. Se voc no conhece VB,

partes do curso no faro sentido para voc. A meta aqui cobrir o que mudou. Assim, se algo no mudou, eu assumirei que voc j o sabe. Se voc conhece VB, e quer aprender VB .NET ou saber o que ele pode lhe trazer, este curso para voc. Se voc usa atualmente o Visual Interdev para criar aplicaes Web, este curso tambm para voc, porque o Visual Interdev foi integrado em todo o Visual Studio .NET. Isto significa que voc pode criar aplicaes como as do Visual Interdev usando VB .NET (e C#). Voc obtm vrias vantagens com esta nova abordagem, incluindo a de poder escrever em cdigo VB .NET e no VBScript, e a vantagem da arquitetura das aplicaes .NET para a Web (ASP .NET) sobre o modelo ASP atual significativa. No importa o que voc estar fazendo com o VB .NET, o ponto de partida a .NET Framework. Se entender a .NET Framework voc no ser capaz de escrever boas aplicaes VB .NET, independente de elas serem aplicaes Windows ou Web. Portanto, prepare-se para iniciar examinando a .NET Framework.

Captulo 1. Porque Voc Deve Migrar Para o Visual Basic .NET?NESTE CAPTULO:

Visual Basic .NET: Uma Nova Estrutura A Common Language Runtime Execuo Gerenciada O Common Type System A Biblioteca de Classes da NET Framework Componentes Auto-Descritos Interoperabilidade Entre Linguagens Segurana Sumrio

Muitas pessoas esto reclamando do Visual Basic .NET. A principal queixa refere-se ao fato de que elas j estavam bem confortveis com o VB atual. verdade que ocorreram mudanas dramticas e que os programadores de VB atuais levaram uns trs anos para se sentirem vontade com a verso 6.0. Contudo, h algumas fortes razes para mudar para o VB .NET, e a curva de aprendizado, embora ngreme no incio, pode ser vencida com a compreenso de alguns dos novos conceitos, principalmente o de .NET Framework.

Visual Basic .NET: Uma Nova Estrutura Uma das questes mais comuns hoje em dia "Porque eu devo migrar para a .NET?". .NET nova, e h muitas questes sobre o que ela pode fazer por voc. De um ponto de vista do Visual Basic, importante entender alguns dos benefcios dramticos que podem ser obtidos pela migrao para o Visual Basic .NET. Muitas pessoas tm olhado para o VB .NET e reclamado das mudanas. A ponto de uma publicao comercial ter divulgado um artigo no qual vrios programadores experimentados em Visual Basic reclamavam de as mudanas terem sido tantas que eles se sentiam chocados. Afinal de contas, h muitas mudanas na linguagem: um novo tratamento de erros (que opcional), namespaces, herana real, multithreading real e muitas outras. Muitos desenvolvedores, porm, sentem que h boas razes para as mudanas no VB .NET. O mundo das aplicaes est mudando, continuando a evoluo que tem ocorrido nos ltimos anos. Se voc voltasse a 1991 e mostrasse para um desenvolvedor de Visual Basic 1.0 um aplicao multicamadas com pginas em ASP no front end, um componente VB COM na camada central com MTS ou COM+, e o SQL Server no back end repleto de stored procedures, isto iria parecer completamente aliengena para ele. Alm disto, nos ltimos anos, a maioria dos desenvolvedores tm usado o VB para criar componentes COM, e esse tm se tornado bem destros no uso de ADO para fazer acesso a bancos de dados. A necessidade de reutilizao e centralizao ( um mode de evitar a distribuio de componentes para as estaes de trabalho) tm direcionado este movimento para o modelo multicamadas. O prximo passo lgico na evoluo dos sistemas multicamadas era tornarem-se aplicaes para a Web. Infelizmente, o movimento para a Web revelou alguns problemas. Escalabilidade era um deles, mas aplicaes mais complexas tinham outros requisitos, tais como transaes que envolviam mltiplos componentes, mltiplos bancos de dados, ou ambos. Para responder a estas necessidades, a

Microsoft criou o Microsoft Transaction Server (MTS) e o COM+. O MTS (no Windows NT 4) e o COM+ ( uma atualizao do MTS no Windows 2000) agem como um ambiente de agrupamento de objetos, permitindo a voc ganhar escalabilidade e transaes distribudas com relativa facilidade. Contudo, componentes VB no podem tirar todas as vantagens do Servio de Componentes tem a oferecer, como pooling de objetos, porque o VB no suporta verdadeira multithreading. Abrindo a Web No modelo ASP/VB6, a Microsoft tinha os desenvolvedores criando um componente e o chamando via ASP. A Microsoft reconheceu que seria uma boa idia tornar este componente diretamente acessvel via HTTP, tal que uma aplicao em qualquer parte do mundo poderia usar este componente. Microsoft conseguiu isto atrves do Simple Object Access Protocol (SOAP), que permite aos desenvolvedores chamar um componente via HTTP usando uma string XML. Os dados so ento retornados via HTTP em uma string XML. Componentes expostos via SOAP Componentes expostos via SOAP so acessveis como qualquer outro item da Web por URLs. SOAP tem a vantagem de ser um padro global e no apenas da Microsoft. Isto tem feito que um grande nmero de vendedores, incluindo arquirivais da Microsoft, a bradar os benefcios dos servios Web. Neste ponto, voc pode ser tentado a pensar que o SOAP tudo que voc precisa, e que voc pode resolver tudo com o VB 6.0. Portanto, importante entender o que o VB .NET lhe d, e porque faz sentido para voc e muitos outros desenvolvedores mudar para o .NET. Por exemplo, voc cria os componentes e os torna acessveis via SOAP, mas como voc faz as pessoas saberem que eles existem? .NET inclui um mecanismo de descoberta que permite que voc encontre componentes que esto disponveis para voc. Voc ver mais sobre este mecanismo na aula 9, "Criando Servios Web com o VB .NET". NET tambm oferece muitos outros recursos, tais como limpeza de recursos, herana real pela primeira vez, depurao que funciona entre linguagens e com

aplicaes em execuo e a possibilidade de criar servios para Windows e aplicaes tipo console. O que significa ".NET"? Antes de prosseguir, importante entender um pouco mais sobre o que significa .NET. H muitos .NETs aqui. H o VB .NET, que a nova verso do Visual Basic. H o Visual Studio .NET (um ambiente integrado que hospeda o VB .NET), o C# (pronunciado "C sharp"), e o C++ .NET. A Microsoft tem chamado muitos dos seus produtos servidores ce ".NET Servers" agora. Subjacente a tudo isto est a .NET Framework e seu dispositivo central de execuo, a Common Language Runtime (Linguagem Comum de.Tempo de Execuo). No modelo .NET, voc escreve aplicaes destinadas .NET Framework.Isto lhes d automtico acesso a benefcios tais como destruio de objetos e recuperao de memria para voc), depurao, servios de segurana, herana e outras coisas mais. Quando voc compila o cdigo de qualquer linguagem que suporta a .NET Framework, ele compilado em algo chamado de MSIL, ou Microsoft Intermediate Language. Este arquivo MSIL binrio, mas no linguagem de mquina; pelo contrrio, um formato independente de plataforma e pode ser executado em qualquer mquina que tenha a .NET Framework. Na .NET Framework h um compilador chamado Just-In-Time, ou compilador JIT. Ele compila o cdigo MSIL para o hardware e sistema operacional da mquina. Olhando para as mudanas fundamentais, importantde entender que a exigncia nmero um dos programadores em VB, por anos, tem sido herana. VB tem tido herana de interface desde o VB4, mas os desenvolvedores queriam herana real ou herana de implementao. Porque? Quais so os benefcios? O grande benefcio da herana poder criar aplicaes mais rapidamente. Esta uma extenso da promessa de reutilizao de cdigo pela orientao a objetos. Com a herana de implementao, voc cria uma classe bsica e constri outras classes que herdam dela a implementao. Por exemplo, voc pode criar uma classe Veculo que prov a funcionalidade bsica que pode ser

herdada pela classe Bicicleta e pela classe Carro. O pont importante aqui que as classes Bicicleta e Carro herdam a funcionalidade, o cdigo real, da classe Veculo. No VB4 e posteriores, o mximo que voc podia fazer era herdar a estrutura e nenhum cdigo de implementao. No VB .NET, a funcionalidade da classe base est disponvel para as suas outras classes, ou voc pode estend-la e modific-la conforme seja necessrio. .NET oferece ferramentas de depurao integradas. Se voc j depurou uma aplicao em ASP que tinha um componente COM feito no VB, voc sabe que tinha que usar o Visual Interdev para depurar o cdigo em ASP e o VB para depurar o cdigo do componente. Se voc tambm tivesse componentes C++ na mistura, teria que usar o depurador C++ naqueles componentes. Com .NET, h um nico depurador. Qualquer linguagem da .NET Framework pode ser depurada com este mesmo depurador, mesmo que uma parte da sua aplicao seja escrita em VB .NET e chame outra parte escrita em C#, ou qualquer outra das linguagens destinadas .NET Framework. .Net oferece um mecanismo de segurana padro, disponvel para todas as partes da sua aplicao. .NET oferece uma soluo possvel para o inferno das DLLs, e remove muito da complexidade de lidar com o COM e o registry. .NET permite que voc execute componentes localmente, sem exigir que a aplicao chamadorea v ao registry para encontrar componentes. H tambm coisas que o VB .NET pode fazer que voc no pode fazer hoje em VB. Por exemplo, aplicaes Web so um novo tipo de projeto. O Visual Interdev est morto com seu cdigo VBScript interpretado . No lugar, voc pode agora criar suas pginas ASP.NET com VB .NET (ou C# ou C++ .NET), e elas sero verdadeiramente compiladas para melhor performance. VB .NET deixa voc criar servios Windows nativamente pela primeira vez oferecendo o tipo de projeto Windows Services. E sim, VB .NET permite que desenvolvedores em VB criem verdadeiros componentes e aplicaes multithreaded pela primeira vez.

Finalmente, voc precisa reconhecer que uma nova linguagem tem que ter um nmero de verso para ela, enquanto o nome final no tiver sido decidido. Poderia perfeitamente ser chamada de VB .NET 2002. Isto implica que em algum ponto haver novas verses do VB .NET, como j houveram do VB. Neste curso, referncias a verses prvias do VB sero chamadas de VB ou VB6. Referncias ao VB .NET 2002 sero apenas VB .NET. Voc decidiu migrar do VB 6.0 para o VB .NET e voc iniciou este curso para saber das mudanas. E ento, a primeira coisa que voc v uma dissertao sobre a .NET Framework. Por que iniciar pela .NET Framework? A verdade que voc no pode entender VB .NET sem antes entender a .NET Framework. Voc ver que a .NET Famework e o VB .NET so fortemente interligados; muitos dos servios que voc criar dentro das suas aplicaes so fornecidos na verdade pela .NET Framework e so meramente chamados em ao pela sua aplicao. A .NET Framework uma coleo de servios e classes. Ela existe como uma camada entre as aplicaes que voc escreve e o sistema operacional. Este um conceito poderoso: a .Net Framework no necessriamente uma soluo para Windows. A .NET Framework poderia ser movida para qualquer sistema operacional, significando que suas aplicaes .NET poderiam rodar em qualquer sistema operacional que hospedasse a .NET Framework. Isto significa que voc poderia alcanar verdadeira capacidade multiplataforma simplesmente criando aplicaes .NET para os casos em que a .NET Framework estivesse disponvel para outras plataformas. Embora esta promessa de capacidade multi-plataforma um forte argumento de venda da .NET, no h ainda um anncio oficial de disponibilizao da .NET para outros sistemas operacionais. Em adio, a .NET Framework excitante porque ela encapsula muito da funcionalidade bsica que costumava ter de ser criada em vrias linguagens de programao.A .NET Framework tem o cdigo que faz os formulrios Windows funcionarem, assim qualquer linguagem pode usar o cdigo embutido para criar e usar formulrios padro do Windows. Em adio, formulrios para a Web so parte da .NET

Framework, assim qualquer linguagem .NET pode ser usada para criar aplicaes para a Web. Adicionalmente, isto significa que vrios elementos de programao sero os mesmos entre as linguagens; um tipo Long ter o mesmo tamanho em todas as linguagens .NET. Isto ainda mais importante quando se trata de strings e matrizes. Voc no mais ter que se preocupar em saber se uma string uma BStr ou uma CStr antes de pass-la a um componente escrito em uma linguagem diferente, o que tem sido uma preocupao comum para os programadores de VB ao chamar APIs escritas em "C". A Common Language Runtime Um dos principais componentes da .NET Framework a Common Language Runtime ou CLR. A CLR fornece vrios benefcios para o desenvolvedor, tais como tratamento de erros, segurana, depurao e controle de verso, e estes benefcios esto disponveis em qualquer linguagem criada para a CLR.Isto quer dizer que a CLR pode servir a uma variedade de linguagens, e pode oferecer um conjunto comum de ferramentas para estas linguagens. A Microsoft criou o VB .NET, C++ .NET, e C# como as principais linguagens para a CLR, o que significa que estas trs linguagens do total suporte para a CLR. Em adio, outras empresas tm sinalizado que fornecero implementaes de outras linguagens, tais como Perl, Python, e mesmo COBOL. Quando um compilador compila para a CLR, o cdigo dito cdigo gerenciado. Cdigo gerenciado simplesmente cdigo que tira vantagem dos servios oferecidos pela CLR. Para que a CLR funcione com o cdigo gerenciado, este cdigo deve conter metadados. Estes metadados so criados durante a compilao por compiladores que visam a CLR. Os metadados so armazenados com o cdigo compilado e contm informaes sobre os tipos, membros e referncias no cdigo. Entre outras coisas, a CLR usa os metadados para:

Localizar classes Carregar classes Gerar cdigo nativo Fornecer segurana

Se voc pensar sobre isto, as tarefas acima costumam ser feitas pelo COM e o registry. Uma das metas da .NET permitir que as aplicaes sejam distribudas sem a necessidade de usar o registry. De fato, os componentes .NET podem ser copiados para um diretrio e usados, sem a necessidade de um processo de registro. .NET trata de localizar e carregar os objetos do componente, o que substitui o trabalho que costumava ser feito pelo COM. A CLR tambm cuida do tempo de vida dos objetos. Assim como COM/COM+ forneciam contagem de referncias para objetos, a CLR gerencia referncias a objetos e os remove da memria quando todas as referncias desaparecem atravs de um processo chamado garbage collection .Embora garbage collection lhe d um pouco menos de controle do que aquele que voc tinha no VB, voc ganha alguns importantes benefcios. Por exemplo, seus erros diminuiro porque o nmero de objetos que permanecem na memria apenas por estarem envolvidos em referncias circulares ser reduzido ou completamente eliminado, porque o .NET tem lgica para lidar com objetos que esto presos a referncias circulares. Alm disto garbage collections acabam sendo muito mais rpidas que o modo antigo de destruio de objetos no VB. Instancias de objeto que voc cria e que so gerenciados pelo CLR so chamados dados gerenciados. Voc pode interagir tanto com dados gerenciados como com dados no gerenciados na mesma aplicao, embora s os dados gerenciados lhe do todos os benefcios da CLR. A CLR tambm define um sistema de tipos padro para ser usado por todas as linguagens que suportam a CLR. Isto significa que as linguagens do tipo CLR tero os integers e longs de mesmo tamanho, e elas tero todas o mesmo tipo de string - sem mais preocupaes com BStrs e CStrs! Este sistema padro de tipos abre as portas para uma poderosa interoperabilidade entre linguagens. Por exemplo, voc pode passar uma referncia de uma classe de um componente para outro, mesmo se estes componentes sejam escritos em linguagens diferentes. Voc tambm pode derivar um classe no C# de uma classe base escrita em VB .NET, ou qualquer outra combinao de linguagens criadas para a CLR. No esquea que COM tambm tem um conjunto de tipos padro,

mas so padres binrios. Isto significa que com COM, voc tem interoperabilidade de linguagens em tempo de execuo. Com o padro .NET , voc tem interoperabilidade entre linguagens em tempo de design. Aps ter sido compilado, o cdigo gerenciado contm metadados, os quais contm informao sobre o componente em si, e os componentes usados para criar o cdigo. A CLR pode verificar para se certificar de que os recursos de que voc depende esto disponveis. Os metadados eliminam a necessidade de armazenar informaes sobre componentes no registry. Isto significa que, mover um componente de uma mquina para outra no necessita de registro ( a menos que seja um assembly global, o que ser descrito na aula 4, "Criando Classes e Assemblies com o VB .NET") e a remoo de componentes to simples como exclu-los. Como voc pode ver, a Common Language Runtime fornece um nmero de benefcios que no s so novos, mas que enriquecem a experincia de criar aplicaes. Outros benefcios que voc ir ver em maiores detalhes incluem alguns dos novos recursos de orientao a objetos do VB .NET. Execuo Gerenciada Para entender como suas aplicaes VB .NET funcionam, e como diferem do cdigo escrito em VB 6.0 para outras aplicaes, importante entender cdigo gerenciado e como ele funciona. Para usar a execuo gerenciada e ganhar os benefcios da CLR, voc precisa usar uma linguagem que tenha sido criada para o runtime. Felizmente para voc, VB .NET est entre estas linguagens. De fato, a Microsoft quis deixar claro que o VB .NET a principal linguagem da plataforma .NET significando dizer que o Visual Basic no mais poder ser chamado de uma "linguagem de brinquedo". O runtime um ambiente neutro do ponto de vista de linguagem de programao, o que significa que qualquer fabricante pode criar uma linguagem que tira vantagem das caractersticas do runtime. Compiladores diferentes podem expor o runtime em diferentes graus para o programador, assim a ferramenta que voc usa e a linguagem na qual voc

codifica podem parecer funcionar algo diferente. A sintaxe de cada linguagem diferente, naturalmente, mas quando o processo de compilao se inicia, todo o cdigo deve ser compilado em algo compreensvel pelo runtime. Nota S porque uma linguagem se direciona para o runtime no significa que esta linguagem no pode adicionar caractersticas incompreensveis por outras linguagens. Para certificar-se de que seus componentes so completamente utilizveis por componentes escritos em outras linguagens, voc precisa usar apenas tipos que so especificados pela Especificao da Common Language. Os elementos da Especificao da Common Languages sero examinados no Apndice A, "A Especificao da Common Language". Microsoft Intermediate Language (MSIL) Um dos aspectos mais interessantes da .NET que quando voc compila seu cdigo, voc no compila em cdigo nativo. Antes que vocs desenvolvedores em VB entrem em pnico e temam estar retornando aos dias de cdigo interpretado, saibam que o processo de compilao traduz o cdigo em algo chamado Microsoft Intermediate Language, que chamado de MSIL ou simplesmente IL. O compilador tambm cria a necessria meta-informao (informao que descreve informao) e a compila no componente. Este cdigo resultante independente de CPU. Aps a IL e as meta-informaes serem gravadas em um arquivo, este arquivo compilado chamado de PE, que e abrevia "portable executable" ou "physical executable". Porque o PE contm a IL e as meta-informaes, ele autodescrito, eliminando a necessidade de uma type library ou interfaces especificadas com a Interface Definition Language (IDL). A meta-informao to completa que qualquer linguagem .NET pode herdar das classes contidas neste PE. Lembre-se que a .NET compatvel em tempo de design, e isto permite que, enquanto voc desenvolve em VB .NET, voc possa herdar de classes criadas no C#, e voc ter total acesso ao IntelliSense e outros recursos do Visual Studio .NET.

O Compilador Just-In-Time O seu cdigo no permanece em IL por muito tempo, contudo. A IL independente de plataforma. porque o arquivo PE contendo a IL pode ser distribudo e instalado com a CLR rodando na .NET Framework em qualquer sistema operacional para o qual exista a .NET Framework. Quando voc roda a IL, contudo, ela compilada em cdigo nativo para a plataforma alvo. Portanto, voc ainda est executando cdigo nativo; voc no est voltando aos tempos de cdigo interpretado. A compilao para cdigo nativo ocorre via uma outra ferramenta da .NET Framework: o compilador Just-InTime (JIT). Com o cdigo compilado, ele poder rodar dentro do Framework e tirar vantagem das caractersticas de baixo nvel tais como gerenciamento e proteo de memria. O cdigo compilado nativo para a CPU na qual a .NET Framework esteja rodando, significando que voc est seguramente rodando cdigo nativo e no cdigo interpretado. Um compilador JIT ser disponibilizado para cada plataforma na qual a .NET Framework rodar, assim voc sempre ter cdigo nativo em qualquer plataforma que rode a .NET Framework. Lembre-se que, at a presente data, a nica plataforma o Windows, mas isto pode mudar no futuro. Nota Ainda possvel chamar APIs especficas de sistema operacional, o que obviamente ir limitar sua aplicao apenas quela plataforma. Isto significa que voc ainda pode chamar APIs do Windows, mas seu cdigo no ser portvel em uma mquina com a .NET Framework em um sistema diferente do Windows. Executando Cdigo Curiosamente, o compilador JIT no compila a IL toda quando o componente chamado pela primeira vez. Ao contrrio, cada mtodo compilado somente na primeira vez que chamado. Isto evita que voc compile sees de cdigo que nunca so chamadas. Aps o cdigo ter sido compilado, naturalmente, chamadas posteriores usaro a verso

compilada do cdigo. Este cdigo nativo compilado ir permanecer na memria. Contudo, a Microsoft criou um compilador Pr-JIT que compila todo o cdigo de uma vez e armazenar a verso compilada em disco. Esta ferramenta chamada ngen.exe e pode ser usada para pr-compilar toda a IL. Se a CLR no encontra uma verso pr-compilada do cdigo, ela inicia o compilador JIT para fazer a compilao. Aps o cdigo entrar em execuo, ele pode tirar todo o proveito da CLR, com benefcios tais como o modelo de proteo, gerenciamento de memria, suporte para depurao, etc. Muitos destes benefcios sero mencionados ao longo do curso; Assemblies Uma das novas estruturas que voc criar no VB .NET o "assembly". Um assembly uma coleo de um ou mais arquivos fsicos. Os arquivos so quase sempre de cdigo, tais como as classes que voc cria, mas eles tambm podem ser de imagens, arquivos de recursos, e outros arquivos binrios associados ao cdigo. Tais assemblies so conhecidos como estticos, porque voc os cria e armazena em disco. Assemblies dinmicos so criados em tempo de execuo e no costumam ser armazenados em disco (embora possam s-lo). Um assembly representa a unidade de distribuio, controle de verso, reuso e segurana. Se isto soa como as DLLs que voc tem criado em Visual Basic nos ltimos seis anos, similar. Assim como uma DLL padro de COM tem uma type library, o assembly tem um manifesto que contem a metainformao para o assembly, tais como as classes, tipos e referncias contidas na IL. O assembly frequentemente contm uma ou mais classes, assim como uma DLL COM. Na .NET, as aplicaes so construdas usando assemblies. assemblies no so aplicaes no sentido completo. Talvez o ponto mais importante sobre assemblies que: Toda aplicao deve ser constituda de um ou mais assembly. O Manifesto do Assembly

O manifesto similar em teoria type library das DLLs COM. O manifesto contm toda a informao sobre os tens no assembly, incluindo que partes do assembly so expostas ao mundo exterior. O manifesto tambm lista as dependncias do assembly de outros assemblies. Cada assembly tem que ter um manifesto. O manifesto pode ser parte do arquivo PE, ou ele pode ser um arquivo separado se o seu assembly contiver mais que um arquivo. Embora esta no seja uma lista completa, um manifesto contm:

o nome do assembly a verso os arquivos no assembly os assemblies referenciados

Em adio, um desenvolvedor pode atribuir atributos customizados para o assembly, tais como um ttulo e uma descrio. Um Fim para o Inferno das DLLs? Um dos grandes benefcios propagandeados do COM foi ser um fim para o inferno das DLLs.Se voc pensar nos tempos da programao de 16-bits, voc lembrar que voc tinha que distribuir um nmero de DLLs com uma aplicao Windows. Parecia que quase todas as aplicaes instalavam as mesmas DLLs, tais como Ctrl3d2.dll. Cada aplicao que voc instalava poderia ter uma verso ligeiramente diferente da DLL, e voc acabava com mltiplas cpias da mesma DLL, mas muitas de diferentes verses. O que era ainda pior, uma verso poderia ser colocada no diretrio WIndows\System e travar muitas das suas aplicaes existentes. O COM foi anunciado como a soluo para resolver tudo. As aplicaes no mais teriam que procurar por DLLs nos seus prprios diretrios , e ento procur-las no diretrio Windows. Com o COM, solicitaes por componentes seriam enviadas para o registry. Embora pudessem haver mltiplas verses da mesma DLL COM na mquina, haveria apenas uma verso no registry a cada momento. Portanto, todos os clientes usariam a mesma verso. Isto significa, contudo, que cada nova

verso de uma DLL teria que garantir compatibilidade com as verses anteriores. Isto conduziu necessidade de as interfaces serem imutveis sob o COM; aps o componente entrar em produo, a interface era assumida como imutvel. Em teoria soa bonito, mas os programadores poderiam (e o fizeram) distribuir componentes que quebrariam a compatibilidade binria; em outras palavras, eles mudaram, adicionaram, ou removeram propriedades e mtodos dos seus componentes. Os componentes modificados ento travavam as aplicaes clientes existentes. Muitos dos desenvolvedores em VB tm lutado com este problema. A .NET Framework e a CLR tentam direcionar este problema para os assemblies. Mesmo antes da .NET, o Windows 2000 introduziu a capacidade de uma aplicao examinar o seu diretrio local, ao invs de ir ao registry. Isto garante que voc sempre tem a verso correta da DLL disponvel para a sua aplicao. O runtime vai alm e permite que os componentes tenham declaradas suas dependncias de certas verses de outros componentes. Em adio, mltiplas verses do mesmo componente podem rodar na memria simultaneamente, o que a Microsoft chama de instanciao lado a lado ou execuo lado a lado. O Global Assembly Cache (GAC) Mesmo que os componentes .NET no tenham que ser registrados, h um processo semelhante se voc tiver um assembly que ser usado por mltiplas aplicaes. A CLR realmente tem dois caches dentro do seu cache de cdigo: o cache de download e o global assembly cache (GAC). Um assembly que ser usado por mais do que uma aplicao armazenado no global assembly cache rodando um instalador que o coloca no GAC. Se um assembly no se encontra no diretrio local nem no GAC, voc pode ter um endereo para ele no arquivo de configurao. A CLR faz ento o download do assembly e o armazena no chache de download e se liga a ele a partir dal. Este cache de download somente para assemblies que precisam ser baixados e no ser discutido mais neste curso.

O GAC onde voc coloca um componente se voc deseja que mltiplas aplicaes o utilizem. muito parecido com o que voc tem nos componentes registrados do VB6. Se o componente no encontrado no mesmo diretrio da aplicao, a aplicao procura-o no GAC, do mesmo modo com o COM pesquisa o registro. Colocar assemblies no GAC tem muitas vantagens.Assemblies no GAC tendem a ter melhores performances porque o runtime os localiza mais rapidamente e a segurana no tem que ser verificada a cada vez que o assembly carregado. Assemblies somente podem ser adicionados ao GAC ou removidos dele por algum que tenha privilgios de administrador. O interessante que voc pode ter diferentes verses do mesmo assembly carregadas no GAC ao mesmo tempo. Note que eu evitei de dizer "registrado no GAC" porque voc no est colocando nada no registro. Mesmo se um componente estiver rodando no GAC, voc pode adicionar uma outra verso do mesmo componente rodando em paralelo. Assemblies podem ser postos no GAC somente se eles tiverem um nome compartilhado. Assemblies e o GAC sero discutidos em maiores detalhes no Captulo 4. O Common Type System (Sistema Comum de Tipos) O Common Type System especifica os tipos suportados pela CLR. Os tipos especificados pela CLR incluem:

Classes As definies do que ir se tornar um objeto; inclui propriedades, mtodos e eventos Interfaces A definio da funcionalidade que uma classe implementa, mas no contm nenhum cdigo de implementao Value Tipes Tipos de dados definidos pelo programador que so passados por valor Delegates Semelhantes a ponteiros de funes no C+ + , delegates so frequentemente usados por tratamentos de eventos e callbacks

O sistema de tipos estabelece as regras que os compiladores de linguagens devem seguir para produzir cdigo que seja compatvel com mltiplas linguagens. Seguindo o sistema de tipos, fabricantes podem produzir cdigo que garantido para funcionar com cdigo de outras linguagens e outros compiladores, porque todas as linguagens so consistentes no uso de tipos. Classes Muitos desenvolvedores em Visual Basic so familiarizados com classes. Classes so definies de objetos que sero criados em tempo de execuo. As classes definem as propriedades, mtodos, campos e eventos dos objetos. Se o termo "campos" lhe causa estranheza, ele simplesmente significa variveis pblicas expostas pela classe; campos so o modo preguioso de criar propriedades. Juntos, propriedades, mtodos, campos e eventos so genericamente chamados membros da classe. Se uma classe tem um ou mais mtodos que no contm qualquer implementao, a classe chamada de classe abstrata. Em VB .NET, voc no pode instanciar classes abstratas diretamente; ao invs disto, voc deve herdar delas na criao de outras classes. No VB6, era possvel criar uma classe que continha apenas definies de mtodos e propriedades, mas sem nenhuma implementao. De fato, esta era a forma como voc criava interfaces no VB. Se voc criasse uma classe somente com definies de mtodos e propriedades e sem cdigo de implementao, voc poderia usar a palavra Implements para herdar a interface por outra classe. Voc realmente podia instanciar a interface no VB6, mas, por no haver nenhum cdigo de implementao, isto era intil. No VB .NET, voc pode criar uma classe com cdigo de implementao, ao invs de apenas a interface, e ento marcar a classe como abstrata. Agora, outras classes podem herdar dela e usar a implementao nela contida ou sobrepor a implementao por outra conforme seja necessrio. Estes so conceitos novos para os desenvolvedores em VB. No passado, oVB tinha apenas herana de interfaces, mas o

VB .NET tem herana "real", conhecida como herana de implementao. No VB .NET, interfaces so separadas das classes. No VB6, voc criava interfaces criando classes com definies de mtodos e propriedades, mas sem nenhum cdigo de implementao nestes mtodos e propriedades. Voc ver mais sobre interfaces na prxima seo, mas saiba que, embora uma classe VB .NET pode implementar qualquer nmero de interfaces, ela pode herdar de uma nica classe base. Isto ser examinado em maiores detalhes ao longo do curso. Classes tm um nmero de caractersticas possveis que podem ser atribudas, e que so armazenadas na metainformao. Em adio, membros podem ter caractersticas. Estas caractersticas incluem itens tais como se a classe ou o membro so herdveis. Isto ser discutido em maiores detalhes no Captulo 4. Interfaces Interfaces no VB .NET so como as interfaces em verses anteriores do VB: elas so definies de uma classe sem a verdadeira implementao. Por no haver nenhum cdigo de implementao, voc no pode instanciar uma interface, mas precisa implement-la em uma classe. H uma exceo regra de "sem cdigo de implementao em uma interface": no VB .NET, voc pode definir os chamados membros estticos. Estes podem ter cdigo de implementao, e voc ver mais sobre eles no Captulo 4. Value Types Nas linguagens .NET, um tipo padro de varivel, como um integer, nativo linguagem, e passado por valor quando usado como argumento. Objetos, por outro lado, so sempre passados por referncia.Contudo, um value type um tipo definido pelo usurio que funciona de modo parecido com um objeto, mas passado por valor. Na realidade, value types so armazenados como tipos de dados primitivos, mas eles podem conter campos, propriedades, eventos e tanto

mtodos estticos como no-estticos. Value types no provocam a sobrecarga de um objeto que est sendo mantido na memria. Se isto parece confuso, pense sobre as enumeraes. Enumeraes so um tipo especial de value type. Uma enumerao tem um nome e um conjunto de campos que definem valores para um tipo de dados primitivo. Enumeraes, contudo, no podem ter suas propriedades, eventos e mtodos. Delegates Um delegate um construto que pode ser declarado em um cliente. O delegate realmente aponta para um mtodo em um objeto particular. Qual mtodo ele aponta para e em que objeto pode ser atribudo quando a instncia do delegate criada na sua declarao. Isto permite que voc defina chamadas a vrios mtodos em diferentes objetos baseado na lgica do seu cdigo. Delegates so mais frequentemente usados para tratar eventos. Usando delegates, voc pode passar eventos para um tratamento centralizado de eventos. Delegates no sero examinados em maiores detalhes neste curso. A Biblioteca de Classes da .NET Framework A .NET Framework fornece um nmero de elementos que j esto criados e prontos para uso em qualquer linguagem compatvel com a Common Language Runtime. Estes elementos incluem itens como tipos de dados primitivos, funes de I/O, acesso a dados, e segurana da .NET Framework. Talvez uma das maiores mudanas no modo como os programadores iro trabalhar com o VB .NET a rea de namespaces. Namespaces sero cobertos no Captulo 3. importante compreender que a .NET Framework fornece um conjunto de classes e membros utilitrios organizados dentro de uma hierarquia chamada namespace. Na raiz da hierarquia est o namespace System. Um namespace agrupa classes e membros dentro de ns lgicos. Desta forma, voc pode ter a

mesmo nome para um mtodo em mais de um namespace. O mtodo Left() poderia portanto existir no namespace System.Windows.Forms e no namespace Microsoft.VisualBasic. Uma vantagem dos namespaces que funes similares podem ser agrupadas dentro do mesmo namespace, independentemente do assembly no qual elas estejam fisicamente alocadas. Qualquer linguagem compatvel com o runtime pode usar o namespace System. Por exemplo, se voc precisasse acessar dados, voc no cria uma referncia ao componente ADO.NET. Em vez disto, voc referencia, ou importa, o namespace System.Data. Frequentemente, voc ver a seguinte linha: Imports System.Data Contudo, isto no importa todos os mtodos e causa um excesso de cdigo. Ao contrrio, instrui o compilador para tratar mtodos e tipos dentro do namespace como parte do prprio namespace do seu projeto, assim ao invs de ter de escrever: Voc pode simplesmente fazer uma chamada a SQLClient() H muitos outros namespaces System. Namespaces System incluem a funcionalidade para segurana, threading, I/O binrio e de texto, e servios Web. Como usar os vrios namespaces System ser apresentado ao longo do curso. No deixe o termo namespace assust-lo. uma das muitas mudanas fundamentais do VB.NET, mas um servio fornecido pelo runtime que d funcionalidade rica e comum a todas as linguagens construdas para o runtime. medida que voc herda dos namespaces fornecidos para voc pelo runtime, sua aplicao poder rodar em qualquer plataforma que suporte .NET. Pode-se dizer que voc est trabalhando no aprendizado do ambiente tanto quanto no aprendizado da linguagem. Este o motivo pelo qual este captulo o primeiro no curso.

Componentes Auto-Descritos No VB tradicional, componentes compilados criavam uma type library para definir o que ia dentro do componente, tal como classes, interfaces, propriedades, mtodos e eventos. A comunicao ocorria atravs de uma interface binria no nvel do COM. Infelizmente, uma linguagem poderia esperar como parmetros tipos de dados e estruturas que no estavam disponveis em outras linguagens, ou que, no mnimo, seriam difceis de implementar. Por exemplo, componentes desenvolvidos em C++ frequentemente experam ponteiros ou estruturas, e isto pode ser problemtico se o programa cliente do componente estiver escrito em Visual Basic. A .NET Framework procura solucionar isto compilando dados adicionais em cada assembly. Estes dados adicionais so chamados meta-informao e permitem que componentes compilados interajam de modo transparente. Junte isto ao fato de haver um sistema de tipos comum tal que todas as linguagens do runtime compartilham os mesmos tipos e voc ver que a interoperabilidade entre linguagens evoluiu. A meta-informao que armazenada no componente binria e contm todos os tipos, membros e referncias naquele arquivo ou assembly. A meta-informao compilada no arquivo PE, mas quando o arquivo usado em tempo de execuo, a meta-informao movida para a memria de tal forma que ela possa ser acessada mais rapidamente. Uma das coisas mais importantes a ser entendida que a meta-informao que permite ao runtime localizar e executar o seu cdigo. A meta-informao tambm usada pelo runtime para criar uma verso vlida de cdigo nativo queando a MSIL compilada. O runtime tambm usa metainformao para manipular os detalhes massantes de limpeza de memria e segurana. Quanto se trata dos benefcios da meta-informao para um programador, saiba que h tantos dados na meta-informao que voc pode herdar de um PE criadao at mesmo em uma linguagem diferente, porque a meta-informao oferece grande riqueza de detalhes. Isto significa que voc est na verdade herdando de um componente compilado, no um arquivo IDL como era requerido anteriormente. De fato, por

ser a meta-informao compilada dentro do PE ou assembly, voc no mais precisa de arquivos IDL ou type libraries. Toda a informao est agora contida no PE. Por padro, a meta-informao contm os seguintes dados:

Identidade do PE ou assembly: nome, verso , cultura, chave pblica Dependncias de outros assemblies Papis e permisses de segurana Tipos exportados

Cada tipo tem as seguintes meta-informes:

Nome, visibilidade, classe base, interfaces implementadas Membro

Em adio, voc pode extender a meta-informao usando atributos. Atributos so criados pelo desenvolvedor e permitem que informaes adicionais sejam juntadas metainformao. Interoperabilidade Entre Linguagens Se voc tem criado componentes COM por agum tempo, voc sabe que uma das grandes promessas do COM a independncia de linguagem. Se voc criasse um componente em C++, voc o poderia usar em VB e vice-versa. Contudo, para chegar a este ponto, o seu cdigo tinha que ser compilado para um padro COM. Muito disto era tranparente para o desenvolvedor VB, mas seu componente tinha que implementar as interfaces IUnknown e IDispatch. Sem estas interfaces, ele no seria um verdadeiro componente COM. Contudo o COM apenas lhe d interoperabilidade entre linguagens no nvel binrio. Isto significa que voc somente pode tirar vantagem desta interoperabilidade em tempo de execuo. Agora, contudo, a CLR lhe d muito mais interoperabilidade entre linguagens. No apenas voc pode derivar classes de um PE escrito em na linguagem A e us-las na linguagem B, mas a depurao funciona entre componentes de mltiplas

linguagens. Desta forma, voc pode percorrer o cdigo em um PE escrito em C# e saltar para uma classe base escrita em VB.NET. Isto significa que sua interoperabilidade entre linguagens est ocorrendo em tempo de design e de runtime, no s no runtime que lhe dado pelo COM. Em adio, voc pode gerar um erro (agora chamado de uma exceo) em uma linguagem e t-lo tratado em um componente escrito em outra. Isto significativo, porque agora os desenvolvedores podem escrever em linguagens com as quais eles se sentem mais confortveis, e estarem certos de que outros codificando em diferentes linguagens sero capazes de usar seus componentes com facilidade. A Exigncia: Usar Apenas Tipos da Especificao Common Language Isto tudo soa bem, e voc est provavelmente ficando excitado com as possibilidades. Contudo, h uma exigncia: para fazer uso desta grande interoperabilidade entre linguagens, voc deve usar apenas aqueles tipos de dados e funes comuns a todas as linguagens. Se voc est se interrogando sobre como fazer isto, a boa nova que a Microsoft j pensou neste problema e estabeleceu um padro chamado a Common Language Specification ou CLS. Se voc programar com a CLS, esteja certo de que voc ter completa interoperabilidade com outros programando com a CLS, no importa que linguagens estejam sendo usadas. Componentes que expem somente as caractersticas da CLS so chamados componentes CLS-compatveis. Para escrever componentes CLS-compatveis, voc deve usar a CLS nestas reas chaves:

As definies de classes pblicas devem conter apenas tipos CLS. As definies de membros pblicos das classes pblicas devem ser de tipos CLS. As definies de membros que so acessveis a subclasses devem ser de tipos CLS. Os parmetros de mtodos pblicos em classes pblicas devem ser de tipos CLS. Os parmetros de mtodos que so acessveis a subclasses devem ser de tipos CLS.

Estas regras falam muito sobre definies e parmetros para classes e mtodos pblicos. Voc livre para usar tipos no CLS em classes privadas, mtodos privados e variveis locais. Mesmo se voc tiver uma classe pblica que voc quer que seja CLS-compatvel, o cdigo de implementao dentro desta classe no tem que ser CLS-compatvel; se a definio for compatvel, voc est seguro. A CLS ainda est em evoluo, mas os alicerces esto bem estabelecidos. Veja o Apndice A para os fundamentos da CLS. Segurana Se voc criar um componente VB hoje, suas chances para implementar segurana so algo limitadas. Voc pode usar o NTFS para atribuir permisses ao arquivo em si. Voc pode colocar o componente em um servio de componente MTS ou COM+ e ativar a segurana baseada no objeto. Voc pode cham-lo via DCOM e usar o DCOMCNFG para atribuir permisses. Voc pode sempre codificar sua prpria segurana. Um dos principais benefcios do runtime que uma inteira infraestrutura de segurana lhe vem embutida. Na verdade, dois modelos principais de segurana esto contidos na .NET Framework: segurana de acesso de cdigo e segurana baseada no objeto. Estes tpicos so discutidos em maiores detalhes no Captulo 12, "Performance e Segurana". Segurana de Acesso de Cdigo (CAS) Esta segurana no controla quem acessa o cdigo, mas o que o cdigo em si pode acessar. Isto importante, porque permite que voc crie componentes que podem ser confiveis em graus variveis. Se voc cria um componente em VB atualmente e quer fazer acesso a banco de dados, voc est livre para fazer chamadas a ADO e conectar-se a um banco de dados (claro, se voc tiver uma identificao de usurio vlida e uma senha). Com o .NET, contudo, voc pode especificar com as ferramentas da .NET Framework que aes o seu componente pode e, mais importante, no pode

realizar. Isto tem o benefcio de impedir que outros usem o cdigo de formas que voc no aprova. Talvez o principal benefcio do CAS que voc pode agora confiar em cdigo baixado da Internet. A segurana pode ser configurada tal que se torna impossvel para o cdigo executar qualquer ao perniciosa. Isto ir prevenir muitos dos vrus de macro que se espalham via e-mail atualmente Segurana Baseada no Objeto (role-based) Segurana Baseada no Objeto o mesmo tipo de segurana que voc obtm quando usa os Servios de Componente MTS ou COM+. Neste tipo de segurana, voc cria o que, na documentao do Windows 2000, chamado de um descritor de segurana. Um descritor de segurana um conjunto de informaes anexadas a um objeto que especifica as permisses de usurios e grupos para acess-lo. Na .NET, o Framework determina o chamador, chamado de 'principal', e identifica as suas permisses e dos grupos a que pertence. Diferentemente do que ocorre no COM+, contudo, a .NET no pode assumir que o usurio tem uma conta no NT. Portanto, a .NET permite principals genricos e customizados, bem como principals padres do Windows. Voc pode definir novos descritores de segurana para cada aplicao se voc quiser. Sumrio Voc acabou de ser conduzido em meio a muitas caractersticas importantes do .NET de forma muito rpida. Se alguns dos termos lhe pareceram estranhos, no se preocupe. Ao longo deste curso eles sero cobertos com maiores detalhes. Este curso ir cobrir tudo o que voc precisa para se iniciar no uso do VB .NET. Para aqueles questionamentos sobre o valor de migrar para o .NET, importante entender os benefcios que o .NET lhe traz. Ter um depurador unificado, ganhar verdadeira multitarefa e, finalmente, ter herana de implementao so grandes passos adiante. A runtime tambm lhe d uma bela estrutura de segurana, e voc no tem mais que se preocupar em registrar componentes. Web Services permitem

que voc crie facilmente servios que so utilizveis atravs de uma conexo HTTP padro. medida que voc trabalha com o VB .NET, entenda que voc tambm est trabalhando intimamente ligado .NET Framework. difcil separar os dois, e quanto melhor voc compreender o Framework, melhor programador de VB .NET voc ser.

Captulo 2. Sua Primeira Aplicao VB .NETNESTE CAPTULO

A Pgina de Incio Criando um Novo Projeto Criando Sua Primeira Aplicao VB .NET Melhorias Para Aplicaes Windows Sumrio

chegada o hora de pular dentro e iniciar o trabalho com o VB .NET. Primeiramente, voc precisa aprender um pouquinho sobre o novo IDE. O novo IDE do VB .NET pode parecer algo familiar a voc, mas h algumas mudanas significativas que o fazem um ambiente mais til. Contudo, estas mudanas pode ser frustrantes para desenvolvedores experientes, porque muitos dos atalhos de teclado mudaram, janelas tm nomes diferentes e as ferramentas de depurao funcionam de modo diferente. O VB .NET parte do Visual Studio .NET ( ou VS .NET), que finalmente rene todas as linguagens de desenvolvimento num s lugar: VB .NET, C++ .NET e C#. Voc pode at mesmo criar uma nica soluo contendo mltiplos projetos escritos individualmente em diferentes linguagens. A Pgina de Incio A primeira vez que voc inicia o Visual Studio .NET, voc levado a uma tela que permite que voc configure o IDE. Esta tela a pgina My Profile, discutida mais adiante neste captulo. Aps voc visitar pela primeira vez a pgina My Profile, todas as inicializaes subsequentes do Visual Studio .NET iniciaro com a pgina de incio (start page), como mostra a Figura 2.1. A pgina de incio contm um nmero de sees conforme indicado pelos links ao longo do lado esquerdo. Estas sees so:

Get Started Esta opo permite que voc abra um dos projetos recentes ou crie um novo projeto. Uns poucos projetos recentes so listados na rea Get Started mostrada na Figura 2.1. medida que voc criar projetos no VB .NET, esta rea ir exibir os quatro projetos mais

recentemente abertos. Esta rea tambm contm links para abrir projetos existentes e criar um novo projeto. What's New Esta opo cobre os recursos novos de linguagem no Visual Studio .NET, incluindo cada linguagem individualmente e o ambiente do Visual Studio .NET. H links para tpicos nos arquivos de ajuda sobre os novos recursos para as linguagens do VS .NET, o .NET SDK e um link para conferir atualizaes do VS .NET. Online Community Esta rea fornece links para os grupos de discusso da Microsoft. Estes so grupos acessveis com qualquer programa de leitura de newsgroups, mas eles so servidos pelo servidor de news da Microsoft (msnews.microsoft.com) e no servidores normais de news da Usenet. Headlines Fornece um local com links para novidades sobre o .NET. Esta pgina inclui um link para o MSDN Online, uma seo para artigos tcnicos, uma seo para o Knowledge Base e vrios outros recursos. Search Online Pesquisa a biblioteca online do MSDN Downloads Lhe d acesso a vrios downloads. Downloads que podem incluir novas ferramentas, tais como service packs e exemplos de cdigo. Os downloads tambm podem incluir novas documentaes. Web Hosting Permite que voc se conecte diretamente a servios que oferecem hospedagem para os seus .NET Web Services ou Aplicaes .NET Web. Com um comando, voc pode publicar suas aplicaes .NET ou servios para estas companhias de hospedagem. Ao menos uma, a Brinkster, oferece hospedagem grtis e com isto voc pode testar sua aplicao. My Profile Esta tela permite-lhe escolher o layout geral do Visual Studio .NET. Voc pode configurar os atalhos de teclado para o mesmo esquema de verses prvias do Visual Studio, tais como a verso 6. Voc pode tambm configurar o layout de janela para parecer com as verses anteriores de projetos do Visual Studio e voc pode filtrar o help automaticamente usando o seu perfil. Ao longo deste curso, eu assumirei que o perfil aquele estabelecido pelo Visual Studio e que todas as demais configuraes so deixadas nos seus valores padres. Figura 2.1. A Pgina Inicial do Visual Studio

Nota A pgina inicial em HTML e provavelmente ir mudar quando o VS .NET for lanado. A ajuda est agora mais intimamente integrada ao Visual Studio. Para ver isto, clique no link What's New na pgina inicial. Note que, quando voc faz isto, uma srie de links para a documentao online so carregados na mesma janela da pgina inicial. Estes links o levam para informaes de ltima hora se voc tiver uma conexo com a Interntet aberta. Clique em um destes links para ver o contedo ser exibido dentro da janela do IDE. Como voc ver mais tarde, possvel at mesmo ter ajuda rodando continuamente enquanto voc trabalha, pesquisando por tpicos associados ao que quer que voc esteja manipulando no momento. Figura 2.2. A ajuda sendo exibida dentro da janela do IDE ( possvel tambm exibir em janela separada).

Criando um Novo Projeto Volte para a pgina inicial clicando no boto de navegao Back da barra de ferramentas e, na pgina Get Started, clique no link New Project. Fazendo isto, ser aberta a caixa de dilogo New Project mostrada na Figura 2.3. Note que h diferentes linguagens que voc pode usar para criar aplicaes em Visual Studio .NET. Este curso ir focar apenas os projetos em Visual Basic. Figura 2.3. A caixa de dilogo New Project

Se voc examinar os tipos de projetos do Visual Basic, voc ver que muitos deles so diferentes dos que voc costuma ver no Visual Basic 6. Alguns dos principais tipos de projetos so:

Windows Application Este um executvel padro na terminologina do VB 6. a forma de criar aplicaes Windows com formulrios e controles. Isto o mais prximo do VB 6 que voc chegar com o VB .NET. Class Library Este tipo de projeto permite-lhe criar classes que sero usadas em outras aplicaes. Pense nisto como se fossem componentes COM que voc tem criado com o VB 6 chamados ActiveX DLL ou ActiveX EXE . Windows Control Library Este tipo de projeto para criar aquilo que costumava ser chamado de ActiveX Controls. Este tipo de projeto lhe permite criar novos controles a serem usados em aplicaes Windows. ASP.NET Web Application Adeus Visual Interdev e linguagens interpretadas para Active Server Pages. O Visual Basic .NET tem os projetos Web Application, que usam ASP .NET para criar aplicaes

Criando Sua Primeira Aplicao VB .NET Voc tem um projeto aberto com um formulrio nele. At aqui, voc nada fez com ele, mas agora voc ir criar a obrigatria aplicao Ol Mundo. Eu me recordo de quando a Microsoft estava correndo o mundo e mostrando como poderia ser fcil criar uma aplicao do tipo Ol Mundo em VB simplesmente teclando uma linha de cdigo. Bem, ainda continua igualmente fcil, mas as coisas certamente se apresentam diferentes agora. Certifique-se de que o designer de formulrios a tab ativa na rea de trabalho e abra a Toolbox. Clique e arraste um boto sobre o formulrio. Posicione-o onde voc quiser. At aqui tudo como no VB6. Agora, d um duplo clique no boto. Um duplo clique sobre o boto causa a abertura da janela de cdigo, exatamente como no VB6. Contudo, no VB .NET, o cdigo adicionado na forma de uma tab na rea de trabalho. A nova tab intitulada Form1.vb, e tem um asterisco em seguida indicando que ela no foi salva. Voc tem bastante cdigo nesta janela, e cdigo que voc nunca viu antes. Parte do cdigo ocultada dos seus olhos, isto devido ao fato de que, no Visual Studio .NET, o editor de cdigo permite que voc oculte ou expanda blocos de cdigo. Se voc expandir o cdigo gerado na seo Windows Form Designer, ver um bocado de cdigo. Na verdade, antes que voc digite qualquer cdigo, j ter o cdigo mostrado na Figura 2.10. Note que eu ativei a numerao de linhas apenas para referenciar as linhas com mais facilidade. Se voc tambm quiser ativar a numerao de linhas, v ao menu Tools, Options. Expanda o n Text Editor e escolha Basic. Cheque a checkbox Line Numbers. Figura 2.10. A janela de cdigo exibe uma considervel quantidade de cdigo antes mesmo de voc comear a digitar.

A primeira linha de cdigo mostra que este formulrio, Form1, na verdade apenas uma classe. Esta uma das maiores mudanas do VB .NET. Formulrios so verdadeiras classes. Por qu? Por que formulrios so realmente apenas classes e tm sido assim sempre. Voc pode nunca ter pensado neles desta forma antes, mas um formulrio apenas mais uma classe. Quando um formulrio exibido, voc apenas instanciou uma classe. A linha seguinte uma declarao Inherits. Qualquer formulrio do Windows que voc cria apenas herda da classe base Form. Voc est chamando uma classe em um dos namespaces .NET System, neste caso, voc est chamando a classe Form no namespace System.Windows.Forms. esta classe que lhe d a funcionalidade bsica dos formulrios, tais como os mtodos e eventos que voc acessar em seu cdigo. A declarao Inherits a sua primeira indicao de herana real no VB .NET. Voc pode herdar desta classe base e ento estend-la se assim o quiser. O cdigo localizado dentro da regio Windows Form Designer mostrado na Listagem 2.1. Listagem 2.1 Cdigo Gerado para Voc pelo Designer de Formulrios Windows#Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer.

InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Friend WithEvents Button1 As System.Windows.Forms.Button 'Required by the Windows Form Designer Private components As System.ComponentModel.Container 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(64, 56) Me.Button1.Name = "Button1" Me.Button1.TabIndex = 0 Me.Button1.Text = "Button1" ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(292, 273) Me.Controls.AddRange(New System.Windows.Forms.Control() { Me.Button1} ) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) End Sub #End Region

A prxima parte dentro da classe um Sub pblico chamado New, localizado dentro da regio de cdigo gerado automaticamente. Note que ele chama um Sub nomeado InitializeComponent. A rotina InitializeComponent criada para voc pelo VS .NET. A nova rotina similar ao procedimento de evento Form_Load que voc est acostumado a ver no VB6. Note que voc pode adicionar algum cdigo seu aps a chamada a InitializeComponent .

Aps o sub New, h o sub Dispose, parecido com o evento Form_Unload do VB6. Este o lugar de limpeza de tudo que voc pode ter feito. No se preocupe sobre as palavras Overloads e Overrides por enquanto, elas sero explicadas quando voc aprender mais sobre herana. Como voc pode ver, a rotina InitializeComponent est neste bloco e ela que configura os controles no formulrio. Note que o boto tem propriedades atribudas, tais como localizao e tamanho, e ento adicionado a uma coleo de controles. Finalmente, abaixo desta regio de cdigo, est a rotina para tratar o evento click do boto. Isto tambm se mostra diferente do que voc tem visto anteriormente. Na verdade, se voc inicia um novo projeto no VB6, adiciona um boto ao formulrio e d um duplo clique sobre o boto, seu projeto inteiro mostra apenas este cdigo:Private Sub Command1_Click() End Sub

Contudo, no VB .NET, voc ver um bocado mais de cdigo. Na verdade, o evento Click no tratado antes da linha 57, ao menos neste exemplo. A declarao do procedimento de evento tambm completamente diferente. No VB .NET, o procedimento de evento parece-se com isto:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub

Novamente, no se preocupe com todas as mudanas por enquanto. Agora, digite a seguinte linha de cdigo: MsgBox "Ol, Mundo!" Quando voc sair desta linha, voc ver que o VB .NET automaticamente adiciona parnteses em torno do argumento, deixando voc com isto: MsgBox("Ol, Mundo!") Esta uma das primeiras mudanas fundamentais da linguagem.. Subs e funes requerem parnteses entorno dos argumentos. O comando MsgBox uma funo, mas no VB6, voc no precisava adicionar parnteses entorno de um parmetro se voc estivesse ignorando o valor de retorno. No VB .NET, voc precisa sempre de parnteses, assim sendo acostume-se a adicion-los ou ao menos acostume-se a ver o VB .NET adicion-los para voc.

Agora hora de rodar esta demonstrao no muito excitante e ver como ela funciona. Voc pode clicar no boto Start na barra de ferramentas (isto deve lhe ser familiar) ou voc pode ir ao menu Debug e escolher Start. O Form1 ser carregado. Clique no boto e voc dever receber a caixa de mensagem com o texto "Ol, Mundo!". Na Figura 2.11, voc notar que o ttulo da caixa de mensagem igual ao nome do projeto, do mesmo modo que era no VB6. Feche a aplicao e retorne ao IDE. Figura 2.11. A aplicao Ol Mundo sendo executada.

Note que uma nova janela est aparecendo na base da tela, uma janela de Output est aberta agora. A Figura 2.12, mostra esta janela. A janela de Output tem uma listbox estilo drop-down que pode exibir diferentes informaes. Atualmente, ela lhe mostra todas as mensagens de depurao. Voc no adicionou nenhum debug.print no seu cdigo, mas certas aes do compilador introduzem automaticamente comentrios na janela de Debug. Figura 2.12. A nova janela de Debug.

Antes de avanar mais, voc pode querer mudar o ttulo da caixa de mensagem. Retorne nica linha de cdigo que voc escreveu at aqui e modifique-a para parecer-se com isto:MsgBox("Ol, Mundo", , "Minha primeira aplicao VB .NET")

Agora que voc adicionou um ttulo caixa de mensagem, rode o projeto novamente e o ttulo da sua caixa de mensagem ser "Minha primeira aplicao VB .NET". Se voc pensa que ela no pode melhorar alm disto, segure firme. Melhorias para Aplicaes Windows O Visual Studio .NET acrescentou uma variedade de recursos ao VB .NET para tornar o IDE mais poderoso e melhorar a funcionalidade de formulrios Windows. H melhorias no suporte a criao de menus, controles que automaticamente redimensionam baseados no texto a ser exibido. melhor posicionamento de controles para janelas redimensionadas e um melhorado mecanismo de atribuio da ordem de tabulao. Ancorando Controles nas Margens do Formulrio Quantas vezes voc criou formulrios e configurou a propriedade BorderStyle para fixa de modo a impedir que os usurios o redimensionassem? Se voc posicionou uma srie de botes na base do formulrio, voc no quer que as pessoas o redimensionem e, subitamente, a linha de base dos botes fique no meio do formulrio. O VB .NET permite que voc ancore os controles em um ou mais lados do formulrio. Isto permite que um controle se mova conforme o formulrio seja redimensionado de forma a ficar no lugar apropriado. Voltando ao Form1, remova o cdigo inserido no procedimento de evento Button1_Click. Faa o formulrio ficar um pouco maior e mova o boto em direo ao canto inferior direito. Agora, adicione um TextBox ao formulrio. Mude a propriedade Multiline do TextBox para True e redimensione o TextBox de modo a preencher a maior parte do formulrio, exceto a poro que agora contm o boto. Seu formulrio deve, agora, assemelhar-se ao que mostra a Figura 2.15. Figura 2.15. O formulrio como mostrado em tempo de design.

Rode o projeto. Aps a janela ser carregada, redimensione a movendo o canto inferior direito para baixo e para a direita. Voc ter algo que se parece com o que mostra a Figura 2.16. Figura 2.16. O formulrio em tempo de execuo mostrando o que ocorre aps o redimensionamento.

Naturalmente, isto parece um bocado estranho e exatamente o que voc est acostumado a ver que acontece no VB6. Sua soluo em VB6, a menos que voc use um componente extra, escrever um bocado de cdigo que executado quando o evento Resize do formulrio disparado. Voc usa este cdigo para mover o boto e redimensionar o TextBox. O VB .NET tem uma forma melhor de lidar com isto, portanto, pare a aplicao e retorne ao IDE. Certifique-se de que voc est na tab Form1.vb[Design] e clique no Button1. Na janela de propriedades, role para baixo at encontrar a propriedade Anchor. Quando voc abrir a list, voc ver uma estranha caixa que mostra algo cinza no meio e quatro retngulos ao seu redor. Por default, os retngulos da esquerda e do topo so escurecidos, enquanto os retngulos da direita e da base esto vazios. Os retngulos escurecidos indicam que, neste momento, o boto est ancorado no topo e esquerda do formulrio. Quando voc redimensiona o formulrio, o boto permanecer mesma distncia do topo e da esquerda do formulrio. Isto no o que voc quer, portanto, clique nos retngulos da esquerda e do topo para limp-los, e clique nos retngulos da direita e da base para escurec-los. Quando voc terminar, a propriedade Anchor dever mostrar-se como na Figura 2.17. Aps voc fechar a lista, a propriedade Anchor dever mostrar Botton, Right.

Figura 2.17. A ferramenta da propriedade Anchor.

Em seguida, clique no TextBox e escolha a propriedade Anchor. Clique nos retngulos da base e da direita, mas deixe os retngulos da esquerda e do topo como j esto. Agora, o TextBox est preso a todas as bordas, e permanecer mesma distncia delas. A propriedade Anchor para o TextBox dever mostrar agora Top, Bottom, Left, Right. Rode o projeto novamente. Aps o formulrio se abrir, redimensione-o. Note que o boto agora permanece no canto direito inferior, e o TextBox automaticamente se redimensionou com o formulrio. Voc pode ver este comportamento na figura 2.18. O redimensionamento e o movimento foram obtidos sem escrever uma linha de cdigo. Figura 2.18. O formulrio mostrando como os controles podem ser redimensionados e movidos conforme o formulrio redimensionado.

Menus Facilitados Se voc odiava a criao de menus em verses anteriores do VB, voc no est sozinho.O editor de menus do VB nunca ganhou nenhum prmio de facilidade de uso nem por ser amigvel ao usurio. O novo editor de menus do VB .NET pode at tornar divertida a criao de menus. Usando o mesmo formulrio do exemplo anterior, v caixa de ferramentas e d um duplo clique no controle MainMenu. O controle MainMenu adicionado rea abaixo do formulrio, chamada de Componente Tray, que voc ver em maiores detalhes mais adiante. Se voc der um clique simples no controle MainMenu na Component Tray, voc ver uma barra de menus adicionada ao formulrio, que simplesmente desloca para baixo o TextBox. O menu mostra um item que diz Type Here, conforme mostrado na Figura 2.19. Figura 2.19. O novo Editor de Menus em ao.

D um clique na caixa que diz Type Here (Digite aqui) e digite &File. Isto ir criar uma nova caixa Type Here direita e uma nova caixa Type Here abaixo. Clique na Type Here abaixo da palavra &File e digite &Open. Do mesmo modo que em verses anteriores do VB, o "&" usado para significar uma seleo Alt+Tecla. Digitando &Open cria uma nova caixa Type Here direita e uma nova abaixo. Como voc pode ver, voc est criando graficamente um menu. Clique na caixa abaixo de Open e digite &Close. Voc pode clicar na caixa Type Here abaixo do menu File e escolher adicionar mais um menu de nvel mximo. Por exemplo, voc poderia adicionar &Edit direita do menu File. Agora, o menu Edit ganha entradas em branco e voc pode adicionar itens copiando e colando. Clique no menu Open que voc acaba de criar. Se voc olhar na janela de propriedades, voc ver que o nome real do objeto MenuItem2. Voc pode mudar isto se quiser, mas no se preocupe com isto por enquanto. Clique na lista para a propriedade Shortcut. Role a lista at encontrar a opo Ctrl+O. A propriedade ShowShortcut configurada para True por default, mas voc no ver o atalho em tempo de design. Rode a aplicao. A Figura 2.20 mostra lhe o que voc deveria ver. Note que o sublinhado das letras (gerado pelo &) no aparece a menos que voc pressione a tecla Alt. Figura 2.20. O novo menu sendo exibido em tempo de execuo.

Configurando a Ordem de Tabulao Se voc detestava criar menus em verses prvias do VB, bem provvel que voc tambm odiava a configurao da ordem de tabulao, especialmente em formulrios complexos. Voc tinha que clicar em cada controle, um de cada vez, e certificar-se de que a propriedade TabIndex estivesse correta. Agora, usando o formulrio com que voc tem trabalhado, remova o textbox. Deixe o Button1 no canto direito do formulrio. Adicione trs novos botes ao formulrio. Posicione-os de tal forma que o Button1 seja o ltimo na srie. Pode at mistur-los, se preferir. Se voc der uma olhada na Figura 2.21, voc ver que os botes foram posicionados de tal forma que voc iria querer que a ordem de tabulao fosse Button2, Button4, Button3 e Button1. Se voc rodar o projeto desta forma, contudo, a ordem ainda ser Button1, Button2, Button3 e Button4. Figura 2.21. O formulrio com botes na ordem errada.

Para configurar a ordem de tabulao, clique no menu View e escolha Tab Order. Voc ter, agora, pequenos nmeros em cada controle que podem receber o foco como mostrado na Figura 2.22. Para modificar a ordem de tabulao, simplesmente clique nos controles na ordem que voc quer que eles recebam o foco. Neste exemplo, voc apenas clica no Button2, Button4, Button3 e Button1, nesta ordem, e a ordem de tabulao criada para voc conforme evidenciado pelo nmero no canto alto esquerdo de cada boto. Figura 2.22. A nova forma de configurar a ordem de tabulao.

Voc pode escolher View, Tab Order novamente e desativar a exibio da ordem de tabulao. Rode o projeto e verifique a nova ordem de tabulao. Controles Line e Shape Se voc examinar a caixa de ferramentas, poder estranhar a ausncia dos controles Line e Shape. Eles se foram. Estes controles se foram, mas voc tem uma alternativa. A Microsoft os removeu porque eles eram controles sem janela correspondente, isto , eles no tinham uma propriedade hWnd, mas eram desenhados diretamente sobre o formulrio. Nos novos formulrios do VB .NET, todos os controles precisam ser janelas e voc no pode mais ter controles transparentes. Agora que voc recebeu a explicao tcnica, o que voc pode fazer sobre isto? A forma fcil de forjar uma linha usar um label. Ative a borda e ento atribua a altura (ou largura) para 1. Isto faz com que o label se parea com uma linha e funciona bem. Para formas mais complexas, a Microsoft recomenda que voc use os objetos GDI+, que so muito poderosos. Os objetos GDI+ esto no namespace System.Drawing, e sero examinados brevemente no captulo 3, "Principais Mudanas do VB .NET". Opacidade de Formulrio

Os formulrios, agora, tm a propriedade Opacity. um recurso necessrio? Provavelmente no, mas pode ser usado para alguns propsitos bastante teis. Por exemplo, voc pode us-la para fazer os formulrios desaparecerem e reaparecerem, e torn-los translucentes enquanto esto sendo arrastados. No formulrio Form, que voc tem trabalhado at aqui, localize sua propriedade Opacity e modifique-a para 50%. Agora, rode o projeto e voc notar que o formulrio est quase todo transparente. O formulrio ainda funciona normalmente. Voc pode clicar e arrastar o formulrio, pressionar os botes. Ele funciona bem, mas est translcido no momento. Feche o projeto e voc poder adicionar algum cdigo para tirar vantagem deste nova propriedade. V caixa de ferramentas e adicione um timer ao seu formulrio. Diferentemente do VB6, o timer no aparece de fato no formulrio, mas na Component Tray para o formulrio. Clique no timer nesta janela e atribua True propriedade Enabled do timer. O intervalo de 100 est bom. Agora, clique na tab Form1.vb para acessar o cdigo. Na rotina Sub New, adicione a seguinte linha aps o comentrio "Add any initialization ..." : Me.Opacity = 0 Isto to somente atribui a opacidade 0, o que significa que o formulrio estar completamente invisvel quando carregado. Em seguida, use as combos Class Name e Method Name no topo da janela de cdigo e escolha o evento Elapsed do controle Timer1. Isto faz com que seja adicionado um procedimento de evento para tratar o evento Timer1_Elapsed. Dentro deste procedimento de evento, entre com o seguinte cdigo: Me.Opacity = Me.Opacity + 0.01 If Me.Opacity >= 1 Then Timer1.Enabled = False Beep() End If Este cdigo simplesmente incrementa a opacidade em .01 a cada vez que o evento Elapsed ocorre. Quando finalmente ele atinge 1 (100%), o timer se desliga atribuindo False sua propriedade Enabled e o bip chamado para soar um alarme tal que voc saiba que ele terminou. Se voc est todo confuso com o cdigo, a listagem 2.2 mostra como a listagem completa ficar (com o cdigo gerado para Windows Form Designer oculto).

Listagem 2.2 Sua Primeira Aplicao VB .NET com Todo o Cdigo Discutido At Aqui. Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles button1.Click End Sub Private Sub Timer1_Elapsed(ByVal Sender As Object, _ ByVal e As System.Timers.ElapsedEventArgs)Handles Timer1.Elapsed Me.Opacity = Me.Opacity + 0.01 If Me.Opacity >= 1 Then timer1().Enabled = False Beep() End If End Sub End Class Rode o projeto. Voc dever ver o seu formulrio surgir aos poucos medida que a opacidade lentamente aumentada. Voc ouvir um bip quando a formulrio estiver plenamente opaco. Sumrio Este captulo procurou introduzi-lo rapidamente no IDE do VB .NET. Voc criou seu primeiro programa em VB .NET e viu alguns dos novos recursos apresentados no IDE. Agora mais fcil fazer os controles manterem suas posies mesmo quando os formulrios so redimensionados. A ajuda mais rapidamente acessvel. O Server Explorer torna mais fcil localizar e usar recursos disponveis na corporao. Novos tipos de projetos abrem um novo mundo para os desenvolvedores VB .NET.Em adio a estas mudanas, h tambm algumas mudanas fundamentais na linguagem. Algumas das quais foram mencionadas neste captulo e, se voc olhou o cdigo, deve ter visto ainda outras. O prximo captulo dedicado a apresentar algumas das mais importantes mudanas na linguagem

Captulo 3. Principais Mudanas do VB .NETNESTE CAPTULO Mudanas Gerais Novos Itens O VB. NET apresenta grandes mudanas para a linguagem Visual Basic. Algumas so modificaes a formas j existentes de trabalhar, enquanto outras so novas por inteiro. Este captulo ir cobrir algumas destas mudanas, mas no uma lista exaustiva de todas as mudanas do VB para o VB .NET. Inicialmente voc ver alguns dos recursos que foram modificados. Ento, voc ir ver alguns dos recursos inteiramente novos. Mudanas Gerais H um nmero de mudanas gerais para se conhecer na migrao do VB para o VB .NET. Entre elas h tpicos tais como a remoo das propriedades default, subs e funes requerendo parnteses e ByVal passando a ser o modo padro de passagem de parmetros. Estas mudanas e outras sero detalhadas nesta seo. Propriedades Padro No VB6, objetos poderiam ter propriedades padro. Por exemplo, o cdigo seguinte perfeitamente vlido no VB6, se voc assumir que Text1 uma textbox: Text1="Hello, World" Este cdigo atribui a string "Hello Word" propriedade default da textbox, a propriedade Text. A principal desvantagem em ter propriedades default que elas exigem que voc tenha um comando Set no VB. Por exemplo, d uma olhada no seguinte bloco de cdigo em VB6:: Dim txtBillTo as TextBox Dim txtShipTo as TextBox txtShipTo = txtBillTo A linha de cdigo txtShipTo = txtBillTo atribui o valor da propriedade Text de txtShipTo ao valor da propriedade Text de txtBillTo. Mas, e se isto no fosse o que voc desejasse? E se, ao contrrio, voc quisesse criar uma referncia em txtShipTo que referenciasse o objeto txtBillTo? Voc teria que usar este cdigo:

Set txtShipTo = txtBillTo Como voc pode ver, propriedades default exigem que voc use Set para atribuir referncias de uma varivel de objeto a outra. O VB .NET se livra deste problema livrando-se das propriedades default. Portanto, para copiar a propriedade Text de txtBillTo para a propriedade Text de txtShipTo, voc tem de usar este cdigo: txtShipTo.Text = txtBillTo.Text Atribuindo uma varivel outra, faz com que a referncia de uma seja passada para a outra. Em outras palavras, voc obtm uma referncia a um objeto sem usar a palavra Set. txtShipTo = txtBillTo ' Referncia de objeto no VB.NET Propriedades Default Requerem Propriedades Parametrizadas Para ser mais preciso, as propriedades default sem parmetros no mais so suportadas. Propriedades default que requerem parmetros so ainda suportadas. Propriedades default com parmetros so muito comuns em classes de colees, como em ADO. Num exemplo de ADO, se voc assumir que rs um recordset ADO, confira o seguinte cdigo: rs.Fields.Item(x).Value ' OK, completamente qualificado rs.Fields(x).Value ' OK, porque o item parametrizado rs.Fields(x) ' Erro, porque Fields no parametrizado A soluo simples qualificar totalmente tudo. Isto evita qualquer confuso sobre quais propriedades so parametrizadas e quais no so. Contudo, como voc sabe dos seus dias de VB, o nmero de pontos que voc usa devem ser minimizados. A razo para isto que cada ponto requer uma pesquisa de OLE, o que torno o cdigo mais lento. Portanto, voc deve codificar cuidadosamente quando estiver lidando com parmetros. Subs e Funes Requerem Parnteses Como voc viu no ltimo captulo, quando voc usa a funo MsgBox, voc precisa sempre usar parnteses com funes, mesmo se voc estiver ignorando o valor de retorno. Em adio, voc precisa usar parnteses tambm quando chamar subs, o que voc no precisava fazer no VB6. Por exemplo, assuma que voc tem este sub tanto em VB6 quanto em VB .NET:

Sub foo(ByVal Greeting As String) 'cdigo de implementao aqui End Sub No VB6, voc poderia chamar este sub de duas formas: foo "Hello" Call foo("Hello") No VB .NET, voc tambm pode chamar este sub de duas formas: Foo("Hello") Call foo("Hello") A diferena entre o modo como o VB e o VB .NET tratam isto , naturalmente, que o VB .NET sempre requer os parnteses nas chamadas, mesmo que voc no esteja retornando nada. No VB .NET, o comando Call ainda suportado, mas no realmente necessrio. Mudanas em Operadores Booleanos Os operadores And, Not e Or eram para ter sofrido algumas mudanas no VB .NET. Inicialmente a Microsoft disse que estes operadores iriam ter um curto-circuitar, mas no momento eles continuam funcionando do mesmo modo que eram no VB6. Curto-circuitar significa dizer que, se voc estivesse examinando duas condies com um operador AND e a primeira delas fosse falsa, seu programa no precisaria examinar a segunda condio. Seu cdigo ficaria mais eficiente. Mas, como no houve nenhuma mudana no VB .NET, isto significa que, assim como no VB6, se voc tiver duas condies em um AND e a primeira falhar, voc ainda ter que examinar a segunda. Examine o seguinte cdigo: Dim x As Integer Dim y As Integer x=1 y=0 If x = 2 And y = 5/y Then ... Como um humano, voc sabe que a varivel x igual a 1. Portanto, quando voc examina a primeira parte do If, voc sabe que x no igual a 2, assim voc pensaria logicamente que deveria parar de avaliar a expresso. Contudo, o VB e o VB .NET examinam a segunda parte da expresso, assim este cdigo

ir causar um erro de diviso por zero, mesmo que o erro esteja na segunda parte da expresso e a primeira parte j tenha sido reconhecida como falsa. Se voc quer curto-circuitar, o VB .NET apresenta agora uma dupla de novos operadores: AndAlso e OrElse. Neste caso, o cdigo seguinte no gerar um erro no VB .NET: Dim x As Integer Dim y As Integer x=1 y=0 If x = 2 AndAlso y = 5/y Then ... Este cdigo no causa um erro; por x no ser igual a 2, o VB .NET no examina a segunda condio. Mudanas em Declaraes Voc pode agora inicializar suas variveis quando voc as declara. Voc no podia fazer isto no VB6. No VB6, a nica forma de inicializar variveis era fazendo-o numa linha separada, como esta: Dim x As Integer x=5 No Vb .NET, voc pode reescrever isto em uma s linha: Dim x As Integer = 5 Uma outra mudana significativa, e muito solicitada, a de poder declarar mltiplas variveis e o tipo de dados a ser assumido por todas elas de uma s vez. Exemplo: Dim x, y As Integer Na declarao acima, como voc provavelmente sabe, no VB6, y ser um tipo de dados Integer, e x um Variant. No VB .NET, isto mudou, assim ambos x e y so Integers. Se voc pensar, "J era em tempo", h muitos que concordam com voc. Isto remove muitos bugs e estranhas converses de tipos que novos programadores experimentam. Fazer com que as variveis sejam de um tipo esperado tambm faz com que o cdigo fique mais eficiente. Suporte para Novos Operadores de Atribuio

O VB .NET agora suporta atalhos para fazer certas operaes de atribuio. No VB6, voc incrementava x de 1 com a seguinte linha de cdigo: x=x+1 No VB .NET, voc pode criar um comando equivalente escrevendo assim: x += 1 No apenas voc pode usar o sinal de mais, mas o VB .NET agora suporta -=, *=, /=, \= e ^= para operaes matemticas e &= para concatenao de strings. Se tudo isto se parece com C/C++, de l que veio. Contudo o operador ++ no suportado. Os desenvolvedores da Microsoft tomaram a deciso de no incluir o operador ++ por achar que isto faria o cdigo menos legvel. ByVal Agora o Default O que muitos consideram uma estranha deciso, o modo padro de passagem de parmetros no VB tem sido sempre a passagem por referncia (ByRef). A escolha foi feita porque realmente a passagem por referncia mais rpida quando feita dentro da mesma aplicao, mas pode se tornar ineficiente quando se faz chamadas a componentes rodando em outro processo. Se voc no sabe bem o que passagem por referncia, por referncia significa que voc est passando apenas um endereo de memria de uma varivel dentro da rotina chamadora. Se a rotina chamada modifica a varivel, ela realmente atualiza a varivel no endereo de memria passado, fazendo com que a varivel se modifique tambm na rotina que a chamou. Passando dados por valor (ByVal) significa que voc est passando uma cpia dos dados rotina chamada. A rotina chamada precisa reservar uma nova rea na memria para armazenar aquele valor. Se a rotina chamada modifica o valor, ele modificado no endereo de memria reservado pela rotina chamada, mas a localizao de memria da rotina chamadora fica intacta. Veja este exemplo em VB6: Private Sub Command1_Click() Dim x As Integer x=3 foo x MsgBox x End Sub Sub foo(y As Integer) y=5 End Sub

Se voc rodar este exemplo no VB6, a caixa de mensagem exibe o valor 5. Isto ocorre porque no VB6, quando voc passa x para foo, voc est enviando o endereo de memria da varivel x. Assim, quando foo modifica y para 5, ela muda o valor no mesmo endereo de memria para o qual x aponta e isto faz com que o valor de x mude tambm. Se voc tentasse digitar este exemplo no VB .NET, voc veria algo acontecer. Primeiro, naturalmente, voc teria que adicionar parnteses ao redor de x na sua chamada a foo. Contudo, quando voc tentasse digitar a definio de foo, o VB .NET automaticamente adicionaria a palavra chave ByVal na sua definio, assim ela terminaria parecendo-se com isto: Sub foo(ByVal y As Integer) Se voc quisesse passar por referncia, voc teria que adicionar a palavra chave ByRef por conta prpria, ao invs de deixar o VB .NET usar o novo padro de ByVal. Isto elimina muitos erros vistos por programadores novatos que no entenderam bem o conceito de passagem por referncia em verses prvias do VB. Assim, no VB .NET, aceitando o padro resulta em passagem de dados por valor. Se voc rodar este cdigo no VB .NET, voc ver 3 na caixa de mensagem. Passagem de dados por valor um benefcio para aqueles que vo chamar rotinas cruzando fronteiras de processos, algo muito comum em aplicaes distribudas. A razo de ser um benefcio depende de como voc passa parmetros entre componentes. Se voc tem duas rotinas no mesmo processo que o que ocorre mesmo quando voc usa dlls locais -, e uma rotina passa um parmetro para a outra ByRef, ambas as rotinas podem acessar o mesmo endereo de memria. Contudo, se voc agora move uma destas rotinas para um outro processo, elas no podem acessar o mesmo endereo de memria (ao menos no com facilidade). Assim, mesmo se voc passar um parmetro para uma rotina fora do processo usando ByRef, a rotina chamada receber uma cpia dos dados e reservar memria para eles. E qualquer mudana feita nos dados pela rotina chamada tem que ser reconduzida para a rotina chamadora, o que requer uma lenta e custosa viagem dos dados entre fronteiras de processos. Passando parmetros para rotinas fora do processo usando ByVal, voc no tem que reconduzir as mudanas para a rotina chamadora. Muitos desenvolvedores criaram componentes para rodar em processos externos no VB (out-of-process), mas passando valores ByRef, no se apercebendo ser mais lento do que a passagem ByVal. O padro do VB .NET de passagem de parmetros ByVal deve evitar muitos destes enganos. Escopo a Nvel de Bloco

O VB .NET acrescenta a possibilidade de criar variveis que so visveis apenas dentro de um bloco. Um bloco qualquer seo de cdigo que termina com uma das palavras: End, Loop ou Next. Isto significa que blocos For...Next, If...End podem ter suas prprias variveis. Veja o seguinte cdigo: While y < 5 Dim z As Integer ... End While A varivel z visvel apenas dentro do loop While. importante perceber que, embora z seja visvel apenas dentro do loop While, seu tempo de vida o mesmo do procedimento. Isto significa que, se voc reentrar no loop, z ter o mesmo valor de quando voc saiu. Portanto, diz-se que o escopo de z de nvel de bloco, mas o seu tempo de vida de nvel de procedimento.While...Wend

Torna-se While...End

While

O loop While ainda suportado, mas o fechamento do loop agora End While ao invs de Wend. Se voc digitar Wend, o editor automaticamente muda para End While. Esta mudana finalmente modifica o loop While para finalmente se assemelhar a outras estruturas de bloco do VB, as quais sempre terminam com uma sintaxe de End . Mudanas em Procedimentos O VB .NET tem mudanas que afetam como voc define e trabalha com procedimentos. Algumas destas mudanas so mencionadas nesta seo. Argumentos Opcionais Requerem um Valor Padro No VB6, voc podia criar um argumento opcional ( ou vrios argumentos opcionais ) quando definia um procedimento. Voc poderia, opcionalmente, passar um valor por eles. Se voc no atribusse um valor padro e o chamador no passasse um valor, a nica forma de voc checar isto era pela chamada a IsMissing. no mais suportado, porque o VB .NET no deixar que voc crie argumentos opcionais que no tenham um valor default. IsMissing no mais necessrio, porque um argumento opcional ter sempre um valor. Por exemplo, sua declarao poderia parecer-se com isto:IsMissing

Sub foo(Optional ByVal y As Integer = 1) Note que a palavra Opcional exibida, do mesmo modo que no VB6. Isto significa que o parmetro no precisa ser passado. Contudo, se ele no for

passado, y recebe o valor default de 1. Se a rotina chamadora passar um valor, naturalmente, y ter o valor que for passado nele.Static

No Mais Suportada em Subs ou Functions

No VB6, voc por Static na declarao de um sub ou funo. Assim fazendo, tornava estticas todas as variveis naquele sub ou funo, o que significa que elas reteriam o valor entre chamadas rotina. Por exemplo, isto era aceito no VB6: Static Sub foo() Dim x As Integer Dim y As Integer x=x+1 y=y+2 End Sub Neste exemplo, x reter seu valor entre chamadas. Assim, a segunda vez que esta rotina for chamada, x j ter um valor de 1 e o valor de x ser incrementado para 2. A varivel y ter o valor de 2 e, portanto, na segunda vez ser incrementada para 4 O VB .NET no suporta mais a palavra chave Static na frente de declaraes de sub ou function como fazia o VB6. Se voc quiser que todas as variveis de um sub ou function sejam estticas, voc ter que colocar a palavra chave Static na frente da declarao de cada varivel. No VB .NET, o sub equivalente ao do exemplo anterior seria: Sub foo() Static x As Integer Static y As Integer x=x+1 y=y+2 End Sub O Comando Return O comando Return pode ser usado para produzir um imediato retorno de uma rotina chamada e, opcionalmente retornar um valor. Por exemplo, veja neste bloco de cdigo: Function foo() As Integer While True Dim x As Integer x += 1

If x >= 5 Then Return x End If End While End Function Neste cdigo, voc entra no que se costuma chamar de loop infinito pela instruo While True. Dentro do loop, voc declara um integer chamado x e comea a increment-lo. Voc testa o valor de x e quando ele se torna maior que 5, voc chama Return e retorna o valor de x. Isto causa um retorno imediato, o que significa que o programa no espera chegar no End Function para retornar. A velha forma de retorno ainda funciona. Por exemplo, para reescrever este procedimento usando o modo antigo de retornar um valor, voc faria como no cdigo a seguir. Voc atribuiria o valor a ser retornado ao nome do procedimento foo. Ento voc sairia do loop e chegaria ao End Function. Voc tambm poderia usar Exit Function ao invs de Exit Do. Function foo() As Integer Do While True Dim x As Integer x += 1 If x >= 5 Then foo = x Exit Do End If Loop End Function ParamArrays So Agora Passadas ByVal Uma matriz de parmetros, ou ParamArray, usada quando voc no sabe quantos valores voc ir passar para um procedimento. Uma ParamArray permite um nmero ilimitado de argumentos. Uma matriz de parmetros automaticamente se redimensiona para conter o nmero de elementos que voc est passando. Um s pode ter uma ParamArray e ela deve ser o ltimo argumento na definio. A matriz deve ser de uma dimenso e todos os elementos devem ser do mesmo tipo de dados. Contudo, o tipo de dados padro Object, que o que substitui o tipo de dados Variant no VB .NET. No VB6, todos os elementos de uma ParamArrary eram passados ByRef. Isto no podia ser modificado. No VB .NET, todos os elementos so passados

ByVal. Isto tambm no pode ser mudado. Novamente, ByRef era usado em verses anteriores do VB por ser mais eficiente para passar parmetros dentro de um programa em que tudo estivesse rodando no mesmo espao de aplicao. Quando estiver trabalhando com componentes out-of-process, contudo, mais eficiente passar parmetros ByVal, como explicado anteriormente. Propriedade Podem Ser Modificadas Para ByRef No VB6, se uma classe tivesse uma propriedade , voc poderia passar aquela propriedade para um procedimento como argumento. Se voc passasse a propriedade ByVal, naturalmente, o valor seria apenas copiado. Se voc a passasse ByRef, a rotina chamada poderia modificar o valor, mais o novo valor no seria refletido de volta na propriedade do objeto. No VB .NET, contudo, voc pode passar uma propriedade para um procedimento ByRef e qualquer mudana feita no valor pela rotina chamada ser r