I C# E .NET – GUIA DO DESENVOLVEDOR Consultores Editoriais Lorenzo Ridolfi Gerente Sênior Accenture Sérgio Colcher Professor do departamento de Informática da PUC-Rio Preencha a ficha de cadastro no final deste livro e receba gratuitamente informações sobre os lançamentos e as promoções da Editora Campus. Consulte também nosso catálogo completo e últimos lançamentos em www.campus.com.br © 2002, Editora Campus Ltda. – uma empresa Elsevier Science Todos os direitos reservados e protegidos pela Lei 5.988 de 14/12/73. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônicos, mecânicos, fotográficos, gravação ou quaisquer outros. Capa Adaptação da original americana por RioTexto Editoração Eletrônica RioTexto Revisão Gráfica Adriana Kramer Projeto Gráfico Editora Campus Ltda. A Qualidade da Informação. Rua Sete de Setembro, 111 – 16º andar 20050-002 Rio de Janeiro RJ Brasil Telefone: (21) 3970-9300 FAX (21) 2507-1991 E-mail: info@campus.com.br ISBN 85-352-0954-9 CIP-Brasil. Catalogação-na-fonte. Sindicato Nacional dos Editores de Livros, RJ L697c Lima, Edwin C# e .Net para desenvolvedores / Edwin Lima, Eugênio Reis. – Rio de Janeiro : Campus, 2002 ISBN 85-352-0954-9 1. C# (Linguagem de programação de computador). 2. Programação orientada a objetos (Ciência da computação). 3. Software de componente. I. Reis, Eugênio. II. Título. 02-0351. CDD – 005.117 CDU – 004.41 02 03 04 05 5 4 3 2 1 Dedicatória Aos meus filhos Miguel e Henrique, que são as pessoas que mais amo neste mundo. Agradecimentos A Deus por ter me dado a coragem e sabedoria diante do desafio tão grande como foi escrever este livro. A tia Ló de maneira muito especial, por ter dedicado boa parte da sua vida em toda a minha formação e educação e por ter me ensinado o “Caminho” – Jesus – pelo qual devo andar. Aos meus pais, Adiel e Yolanda, porque sem os esforços que eles fizeram não poderia ter chegado aqui. In memoriam De “mi hermano” Rubén. De “mi abuelita” Mamá Sarita. “…consegui, painho…” Meu filho de dois anos Edwin Lima V VI Dedicatória À minha esposa Flávia e aos meus filhos Thales e Alice. Eles são o meu grande tesouro e fonte de inspiração. Agradecimentos A Flávia, por todo o carinho, paciência e estímulo ao longo desta empreitada. A todos que, direta ou indiretamente, me ajudaram a ser o que eu sou hoje. In memoriam Ao meu pai, que recentemente deixou este mundo de maneira tão serena. "O amor é um oceano de emoções inteiramente rodeado de despesas" Lorde Dewar Eugênio Reis VII VIII Os Autores Edwin Lima, pai de dois filhos brasileiros, Miguel e Henrique, nasceu em El Sal - vador, na América Central, em 1972, onde obteve a educação fundamental. Em 1992, recebeu uma bolsa de estudos para estudar no Brasil, onde graduou-se como Bacharel em Ciências da Computação pela Universidade Federal da Paraí - ba em João Pessoa. Ingressou no mercado de trabalho em 1996, numa empresa de consultoria em João Pessoa, onde trabalhou até o ano 2000. Nesse período, participou como analista de sistemas/desenvolvedor em diversos projetos, dentre os quais se des - tacam umsistema dehome banking, aplicações Web e de data warehouse em em - presas de telecomunicações na Bahia, Pernambuco e Paraíba, e diversos outros projetos para empresas do segmento público. No ano 2000, foi contratado para trabalhar na NEC Computers Internatio - nal na Holanda como Data Integration & Oracle Specialist, onde atua até hoje desenvolvendo sistemas no ambiente Oracle para projetos de data warehouse e de integração de sistemas. Acompanha ativamente as tendências tecnológicas tendo em sua bagagem profissional certificações da Microsoft (MCP), larga experiência em linguagens de programação, suporte a bases de dados SQL Server. É especialista no sistema operacional MS Windows NT Server e Workstation 4.0 e trabalha no desenvol- vimento de aplicações para plataformas Microsoft e de código aberto. Investe seu tempo na leitura e na sua atualização profissional investigando as novas ten- dências tecnológicas no mercado de TI. Finalmente, como fruto do seu compromisso com a promoção dos valores do Reinode Deus, ele se identificaprofundamente com as causas sociaisque con- correm de uma forma ou de outra para a construção de uma sociedade mais justa e igualitária. IX Eugênio Reis começou a estudarprogramação, quase quepor acaso, ainda aos 15 anos de idade, num pequeno computador NEZ-8000 com apenas 2k de memó - ria e uminterpretador Basic. Hoje,possui mais de17 anos dedicadosao assunto e domina as mais variadas linguagens de programação em diversos ambientes. Entre 1999 e 2000, obteve as certificações de MCSE (Microsoft Certified Systems Engineer), MCSD (Microsoft Certified Solution Developer), MCDBA (Microsoft Certified Consultant), MCT (Microsoft Certified Trainer), OCP (Oracle Certified Professional) e Borland Delphi Certified Consultant. Atualmente, trabalha como Consultor de Desenvolvimento Corporativo em Ambiente Cliente/Servidor e Distribuído sobre uma base de dados de 1,5 bilhão de registros (aproximadamente 2 terabytes) para o Governo do Estado de Nova York, nos Estados Unidos. Seu hobby preferido é música, é multiinstrumentista de cordas e freqüente - mente publica artigos sobre o assunto na Internet. Isso, claro, quando seus dois filhos, Thales e Alice, e sua esposa Flávia assim o permitem! Seu Web site é http://www.eugenio.com.br. X Sumário Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII PARTE I Fundamentos de C# .Net 1 A plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 A linguagem C# . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 As características do C# . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3 Programação Orientada a Objetos (OOP) em C# . . . . . . . . . 68 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4 Namespaces, Assemblies e documentação de sistemas usando XML . . . . . . . . . . . . . . . . . . . . . . 95 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Assemblies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Documentando sistemas em C# . . . . . . . . . . . . . . . . . . . . . . 112 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5 Windows Forms . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Usando FORMS: o coração de toda aplicação Windows . . . . . . . . . . 119 Usando o componente TabControl . . . . . . . . . . . . . . . . . . . . . 131 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 XI [...]... a ele Neste livro, nos basearemos neste ambiente para a apresentação dos exemplos Entendemos que a maioria dos desenvolvedores da plataforma Windows irá usá-lo e por isso achamos desnecessário usar outros ambientes de desenvolvimento m 18 NET SDK Framework: Este ambiente vem junto com o SDK NET e é apenas de linha de comando Pode ser baixado do site da Microsoft C-SharpDevelop: Este ambiente de desenvolvimento... porque estes espaços já foram liberados anteriormente; é exatamente esse tipo de erro que o coletor de lixo nos ajuda a evitar O gerenciamento da memória, quando efetuado diretamente pelo programador, torna os programas mais eficientes em termos de desempenho, mas ao mesmo tempo o penaliza, obrigando-o a alocar e desalocar memória quando assim é requerido A NET permite que o programador faça esse gerenciamento... Suporte a código legado: o C# pode interagir com código legado de objetos COM e DLLs escritas em uma linguagem não-gerenciada m Flexibilidade: se o desenvolvedor precisar usar ponteiros, o C# permite, mas ao custo de desenvolver código não-gerenciado, chamado “unsafe” m Linguagem gerenciada: os programas desenvolvidos em C# executam num ambiente gerenciado, o que significa que todo o gerenciamento de memória... de programação deverão ser mantidos Isso implica necessariamente que uma parte da equipe de desenvolvedores terá de cuidar do suporte, manutenções evolutivas ou corretivas dos sistemas existentes, enquanto outra parte da equipe terá de cuidar do desenvolvimento de sistemas na nova linguagem A resposta para esse problema é razoavelmente simples: a NET não obriga o desenvolvedor a mudar a linguagem de... acima, METADADOS com informações da aplicação também são gerados, e obviamente armazenados na forma de uma DLL ou de um arquivo executável Isso é conhecido como Executável Portável (Portable Executable) ou simplesmente PE Diz-se portável porque ele poderá ser executado em qualquer plataforma que suporte NET, sem necessidade de recompilação, operação que será efetuada automaticamente pelo runtime quando... linguagens de programação o que de melhor encontramos em técnicas de desenvolvimento nas principais linguagens de hoje .NET e JAVA Muito se fala que a NET chegou ao mercado para concorrer pelo espaço ocupado pela linguagem JAVA Em certo sentido isso é verdade, principalmente no que diz respeito ao desenvolvimento de Web Services e aplicações Web “Server Side” (do lado servidor) Entretanto, consideramos... que se encontra neste namespace System.IO Biblioteca para lidar com entrada e saída, gerenciamento de arquivos etc System.NET Aqui você encontra bibliotecas para programação de redes, sockets etc System.Reflection Em NET você pode gerar código em tempo de execução, descobrir tipos de variáveis etc As bibliotecas necessárias para isso encontram-se neste namespace System.Runtime.InteropServices e System.Runtime.Remoting... sistemas precisa ter uma biblioteca de classes básica que alavanque a simplicidade e a rapidez no desenvolvimento de sistemas É este o objetivo da BCL (Biblioteca de Classes Base), oferecer ao desenvolvedor uma biblioteca consistente de componentes de software reutilizáveis que não apenas facilitem, mas também que acelerem o desenvolvimento de sistemas Na BCL encontramos classes que contemplam desde um novo... Mobile … Figura 1.4 Gerenciamento da memória: introduzindo o GC (Garbage Collector) O gerenciamento da memória é efetuado pelo runtime, permitindo que o desenvolvedor se concentre na resolução do seu problema específico O que diz respeito ao sistema operacional, como o gerenciamento da memória, é feito pelo runtime Como isso é efetuado? À medida que uma área de memória é necessária para alocar um objeto,... Linguagem, é um subconjunto do CTS, e define um conjunto de regras que qualquer linguagem que implemente a NET 8 deve seguir a fim de que o código gerado resultante da compilação de qualquer peça de software escrita na referida linguagem seja perfeitamente entendido pelo runtime NET Seguir essas regras é um imperativo porque, caso contrário, um dos grandes ganhos do NET, que é a independência da linguagem . I C# E .NET – GUIA DO DESENVOLVEDOR Consultores Editoriais Lorenzo Ridolfi Gerente Sênior Accenture Sérgio Colcher Professor do departamento de Informática. indiretamente, me ajudaram a ser o que eu sou hoje. In memoriam Ao meu pai, que recentemente deixou este mundo de maneira tão serena. "O amor é um oceano