C# Guia do Programador Joel Saade Novatec
Copyright 2011 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Editoração eletrônica: Camila Kuwabata e Carolina Kuwabata Revisão gramatical: Gabriela de Andrade Fazioni Capa: Victor Bittow ISBN: 978-85-7522-253-9 Histórico de impressões: Janeiro/2011 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Saade, Joel C# : guia do programador / Joel Saade. -- São Paulo : Novatec Editora, 2010. Bibliografia. ISBN 978-85-7522-253-9 1. C# (Linguagem de programação para computadores) 2. Microsoft Visual C# I. Título. 10-11327 CDD-005.133 Índices para catálogo sistemático: 1. C# : Linguagem de programação : Computadores : Processamento de dados 005.133 CRM20110117
Sumário Introdução...13 Sobre C#...15 Capítulo 1 Primeiros passos...16 Estrutura básica de um programa C#...16 Capítulo 2 Elementos da linguagem...20 Identificadores...20 Variáveis...20 Variáveis locais tipadas implicitamente... 21 Escopo e existência de variáveis...22 Tipos de dados...23 Tipos value predefinidos...24 Conversões de tipos em atribuições...26 Type cast...27 Conversões numéricas explícitas...29 Tipos reference predefinidos...29 Tipos nullable... 31 Constante string verbatim...32 Comparação de strings...33 Concatenação de strings...33 Constantes...34 Numéricas...34 Simbólicas...34 Sequências de escape...35 Operadores...36 Operador de atribuição...36 Operadores aritméticos...37 Operadores unários e binários...39 Operador condicional ternário...39 Operadores bitwise...39 Lógicos (booleanos e bitwise)... 41 Bitwise de atribuição... 44 Lógicos short-circuit... 44 Relacionais...45 Precedência e associatividade de operadores... 46 5
6 C# Guia do Programador Capítulo 3 Estruturas de decisão e iteração...47 Bloco de comandos...47 Comando vazio...47 Estruturas de decisão...48 Estruturas de iteração...53 Capítulo 4 Arrays...63 O que é array...63 Arrays unidimensionais...63 Arrays unidimensionais tipados...65 Arrays multidimensionais...65 Arrays bidimensionais...65 Arrays tridimensionais...67 Arrays irregulares (jagged)...69 Array de strings...72 Array de caracteres...74 Atribuição de variáveis de referência a arrays...76 Manipulação de arrays... 77 Métodos...78 Propriedades...104 Capítulo 5 Tipos value definidos pelo usuário...106 Enumeração...106 Estrutura...109 Atribuição de estruturas...112 Array de estruturas...113 Estruturas aninhadas...114 Estruturas como valor de retorno...115 Estruturas tipadas...115 Capítulo 6 Classes...117 O que é classe...117 Estrutura de uma classe...117 Modificadores de classes...118 Modificadores de campos e métodos...118 Objetos... 120 Atribuição a variáveis do tipo reference...121 Construtor de classes... 122 Construtor com parâmetros... 123 Sobrecarga de construtores... 123 Construtor static... 125 Inicializadores de objetos... 126 Destrutor de classes... 127 Classes static... 128 Classes parciais... 129 Referência this... 132 Chamada a construtores sobrecarregados por meio da referência this... 134
Sumário 7 Herança de classes... 135 Cadeia de herança... 137 Membros protected... 139 Herança e construtores... 139 Construtor da classe-base...141 Ocultação de membros... 142 Acesso a um membro oculto... 143 Ordem de execução dos construtores... 143 Referências a classes-base e objetos de classes derivadas... 144 Métodos virtuais... 146 Chamada a métodos virtuais de uma classe-base... 150 Classes abstratas e métodos abstratos...151 Classes sealed... 153 Capítulo 7 Métodos...154 O que é método... 154 Passagem de argumentos... 155 Passagem por valor... 155 Passagem por referência...156 Argumentos nomeados... 157 Argumentos opcionais... 158 Comando return... 159 Parâmetro out...160 Parâmetro params... 162 Passagem de arrays... 163 Passagem de strings...164 Passagem de referências... 165 Retorno de objetos...166 Retorno de arrays... 167 Sobrecarga de métodos...168 Métodos recursivos... 169 Métodos static e campos static...171 Campos static... 172 Capítulo 8 Generics...174 O que é Generics...174 Métodos genéricos...174 Classes genéricas... 177 Classes genéricas com mais de um tipo genérico... 179 Estruturas genéricas... 180 Capítulo 9 Indexadores e propriedades...182 Indexadores... 182 Propriedades... 184 Capítulo 10 Interfaces e delegates...186 Interfaces... 186 Implementação de interfaces... 187
8 C# Guia do Programador Herança de interfaces... 189 Delegates... 190 Delegate method group conversion... 192 Delegates e métodos de instância... 192 Delegates para métodos anônimos... 193 Multicasting... 196 Capítulo 11 Sobrecarga de operadores...198 O que é sobrecarga de operadores... 198 Sobrecarga de operadores unários... 198 Sobrecarga de operadores binários... 199 Sobrecarga de operadores relacionais... 201 Sobrecarga de true e false...203 Capítulo 12 Passagem de argumentos a um programa...206 Método Main()...206 Mais de um método Main()... 212 Capítulo 13 Exceções...214 O que é exceção...214 O mecanismo de exceções...214 Blocos try e catch...214 Múltiplos blocos catch...217 Captura de qualquer exceção...217 Blocos try aninhados... 218 Bloco finally... 219 Disparo de exceções...220 Classes de exceção do usuário... 221 Operadores checked e unchecked...223 Capítulo 14 Formatação de valores e manipulação de data e hora...225 Formatação de valores numéricos...225 Formatação com os métodos Write() e WriteLine()...226 Formatação com o método ToString()...228 Formatação personalizada de valores...229 Data e hora... 233 Objetos DateTime... 233 Formatação padrão de data e hora...241 Formatação personalizada de data e hora... 243 Capítulo 15 Namespaces...246 Namespace...246 Declaração de namespaces...246 A diretiva using...248 Namespaces aninhados... 249 Namespaces com mesmo nome...250 Qualificador ::...251
Sumário 9 Capítulo 16 Explorando o namespace System...253 O namespace System... 253 Estruturas dos tipos value predefinidos... 253 Estrutura Boolean...254 Estrutura Char...256 Estrutura Byte...265 Estrutura Int16... 267 Estrutura Int32...269 Estrutura Int64...272 Estrutura SByte... 274 Estrutura UInt16...276 Estrutura UInt32...279 Estrutura UInt64... 281 Estrutura Decimal...283 Estrutura Double... 291 Estrutura Single...295 Classe Environment...299 Métodos...299 Propriedades...303 Classe Math...306 Campos...306 Métodos...306 Classe Random...313 Construtores...313 Métodos...314 Classe String...317 Campos...317 Propriedades...318 Construtores...319 Métodos...319 Capítulo 17 Objetos StringBuilder...339 String versus StringBuilder... 339 Construtores... 339 Métodos...342 Propriedades...351 Capítulo 18 Modo unsafe...353 Modo seguro versus modo unsafe... 353 Ponteiros... 353 Declaração de ponteiros... 353 Operador de endereço... 354 Operador de de-referência... 354 Acesso a membros de estruturas com ponteiros... 357 Comando fixed... 358 Aritmética de ponteiros e arrays...360 Indexação de ponteiros...362
10 C# Guia do Programador Ponteiros e strings...364 Operador sizeof...365 Comando stackalloc...366 Capítulo 19 Coleções...369 Coleções genéricas...369 Coleção Dictionary<TK,TV>...369 Coleção LinkedList<T>...377 Coleção List<T>...387 Coleção Queue<T>...414 Coleção SortedDictionary<TK,TV>... 418 Coleção SortedList<TK,TV>...428 Coleção Stack<T>...436 Coleções não genéricas...440 Coleção ArrayList... 441 Coleção Hashtable...465 Coleção Queue... 475 Coleção SortedList...480 Coleção Stack...493 Armazenagem de classes/estruturas em coleções...498 Inicializadores de coleções... 501 Capítulo 20 Criação de DLLs: modo console...505 O que é DLL...505 Capítulo 21 Criação de componentes...512 O que é componente...512 O modelo de componente...512 O que é um componente C#...512 Capítulo 22 Diretórios, drives e arquivos...516 Manipulação de diretórios e drives... 516 Classe Directory... 516 Classe DirectoryInfo... 527 Classe DriveInfo...536 Operações de entrada/saída via console... 539 Métodos... 539 Propriedades...549 Redirecionamento de entrada/saída...550 Manipulação de arquivos... 553 Byte streams e character streams... 553 Entrada/saída em arquivos orientada a byte... 553 Entrada/saída em arquivos baseada em caractere... 554 Classe FileStream... 554 Classe TextReader... 559 Classe TextWriter... 561 Classe BinaryWriter...563
Sumário 11 Classe BinaryReader...565 Classe File...569 Classe FileInfo... 579 Capítulo 23 Aplicações gráficas...589 Primeira aplicação...589 Exibição de message boxes... 593 Reprodução de sons... 597 Classe SoundPlayer... 597 Classe SystemSound...599 Classe SystemSounds...599 Menus...600 Controle ListBox...603 Fontes e cores...607 Controle TrackBar...609 Linhas e formas geométricas... 612 Chamada a programas... 616 Exibição de imagens... 618 Múltiplos Forms...620 Clipboard...626 Métodos...626 Barra de ferramentas controle ToolStrip...627 Impressão de arquivos... 632 Criação de DLLs: modo gráfico...636 Exibição de páginas Web...640 Capítulo 24 Banco de dados...643 Visão geral sobre o ADO.NET...643 Namespaces...644 Provedores de dados...644 Objeto DataSet...647 Data commands... 657 Métodos e propriedades do objeto DataReader... 661 DataSets e DataAdapters...665 DataSet e arquivos XML... 672 Vinculação de dados (Data binding)... 674 Apêndice A Precedência de operadores...680 Apêndice B Tipos de dados do T-SQL...681 Bibliografia...682 Índice remissivo...683