Fábio Camara
Books
Books
Books
Books
Books
Visual
Visual
Visual
Visual
Visual
Dominando o Visual
Studio .NET com C#
Sumário
Prefácio... XIII
1 Introdução ... 1
1.1 Quem Deve Ler este Livro? ... 1
1.2 Visão Geral do Conteúdo ... 1
1.3 Código de Exemplo ... 2
2 Começando... ... 3
2.1 Versões do Visual Studio .NET ... 5
2.1.1 Visual Studio .NET Professional ... 5
2.1.2 Visual Studio .NET Enterprise Developer ... 5
2.1.3 Visual Studio .NET Enterprise Architect ... 5
2.2 Comparação entre as Versões ... 6
2.3 Visual Studio .NET – A Ferramenta IDE ... 10
2.4 Requerimentos para a Plataforma .NET ... 11
2.5 NET Framework - Redistribuição ... 11
3 Tendo a Programação como Profissão ... 13
3.1 Lógica de Programação ...15
3.1.1 Seqüência Lógica e Instruções ... 15
3.1.2 Algoritmo ...16
3.2 Programação para Windows ... 17
3.2.1 Interface Windows ... 18
3.3 Dica para Aprender Novas Linguagens ... 19
4 Conhecendo o Visual Studio .NET... 21
4.1 Gerenciando o Ambiente de Desenvolvimento ... 21
4.2 Conhecendo as Janelas do Ambiente de Desenvolvimento ...24
4.2.1 Janela Solution Explorer ... 24
4.2.2 Janela ToolBox ... 25
4.2.3 Janela Properties ... 26
4.2.4 Janela OutPut ... 27
4.2.5 Janela Object Browser ... 27
4.2.6 Janela Class View ... 28
4.2.7 Janela Web Browser ... 29
4.2.8 Janela Favorites ... 30
4.2.9 Janela Server Explorer ... 30
4.3 Macro Explorer ... 31
4.4 Task List ... 31
4.5 Command Window ... 32
4.6 Atalhos da IDE ... 32
4.6.1 Comentários ... 33
4.6.3 Abrindo/Fechando Blocos de Código ... 33
4.6.4 Linhas de Código ... 34
4.6.5 Encontrando o Final do Método ... 34
4.6.6 Informações de Parâmetro ... 34
4.7 Criando Aplicações Baseadas em Templates ... 35
4.8 Ocultamento do Texto ... 36
4.9 IntelliSense ... 37
4.10 Obtendo Ajuda ... 38
4.11 Personalizando o Text Editor ... 39
5 Trabalhando com o Visual Studio .NET ... 43
5.1 O Primeiro Contato ... 43
5.2 Declarando as Propriedades ... 46
5.2.1 Identificadores ... 47
5.3 Conhecendo as Propriedades mais Comuns ... 47
5.3.1 Name ... 47
5.3.2 Text ... 48
5.3.3 Location “X e Y” ... 48
5.3.4 Size “Height e Width” ... 48
5.3.5 Font ... 48 5.3.6 BackColor ... 49 5.3.7 TabIndex ... 49 5.4 Desvendando Eventos ... 49 5.4.1 Click ... 50 5.4.2 KeyPress ... 50 5.4.3 Enter ... 50 5.4.4 Leave ... 51 5.4.5 Resize ... 51 5.4.6 TextChanged ... 51 5.5 Métodos Simples ... 51 5.5.1 Show( ) ... 51 5.5.2 Close( ) ... 51 5.5.3 Refresh( ) ... 51 5.5.4 Dispose( ) ... 52 5.5.5 Hide( ) ... 52
5.6 Melhorando nosso Primeiro Contato ... 52
5.7 Debugando uma Aplicação ... 53
5.8 Um Giro pelos Componentes ... 55
6 Anatomia de Nosso Projeto C# ... 61
6.1 Alternativas Gratuitas ... 62
6.1.1 Sharp Develop ... 63
6.1.2 WebMatrix ... 64
6.2 Namespaces ... 65
6.3 Class ... 67
6.4 Procedimentos e Funções ... 69
6.4.1 Métodos ... 69
6.4.2 O Assistente Add Method ...70
6.5 Compilando e Executando um Programa ... 71
6.6 Assemblies ...72
6.6.1 Código Gerenciado ...74
6.6.2 Verificações em Tempo de Compilação ... 75
6.7 Opções de Compilação ... 75
6.8 Extensões de Arquivos no Visual Studio .NET ... 76
6.8.1 Arquivos .SLN ... 76 6.8.2 Arquivos .CSPROJ ... 77 6.8.3 Arquivos .CSPROJ.USER ... 77 6.8.4 Arquivos ASPX ... 77 6.8.5 Arquivos ASMX ... 77 6.8.6 Arquivos CS ... 77 6.9 Explorando o ILDASM ...78 6.10 .NET Remoting ... 80
6.11 Documentação de Código no .NET ... 81
6.11.1 Documentação XML ...84
6.11.2 Integração com IntelliSense. ... 84
7 Variáveis na Linguagem C# ... 89 7.1 Tipos ... 89 7.1.1 Tudo é Objeto ... 90 7.2 Inteiros Assinados ... 91 7.2.1 Tipo Short ... 92 7.2.2 Tipo Int ... 92 7.2.3 Tipo long ...92
7.3 Inteiros não Assinados ... 92
7.3.1 Tipo byte ...92 7.3.2 Tipo ushort ... 93 7.3.3 Tipo uint ...93 7.3.4 Tipo ulong ... 93 7.4 Tipos Lógicos ... 93 7.4.1 Tipo bool ...93 7.5 Tipo de Caractere ... 93 7.5.1 char ... 93 7.6 Ponto Flutuante ... 94 7.6.1 float ...94 7.6.2 double ... 94 7.6.3 decimal ... 94
7.7 Tipos de Data e Hora ...94
7.7.1 DateTime ...95
7.7.2 Regionalizando o Formato da Data ... 96
7.8 Tipo String (texto) ... 100
7.10 Orientações Importantes sobre Variáveis ... 102 7.10.1 Variáveis Automáticas ... 102 7.10.2 Variáveis de Instância ... 102 7.10.3 Variáveis Estáticas ... 103 8 Modificadores ... 105 8.1 Modificadores de Parâmetros ... 105
8.2 Modificadores para Tudo ... 106
8.2.1 Modificadores de Classe ... 107
8.2.2 Modificadores de Membros ... 107
8.2.3 Modificadores de Acesso ... 108
9 Conscientizando C# ... 109
9.1 Palavras Reservadas (Keywords) ... 109
9.2 Expressões ... 110 9.2.1 Condicionais ... 110 9.3 Loops... 112 9.3.1 For ... 113 9.3.2 Foreach / in ... 114 9.3.3 While ... 115 9.3.4 Do/while ... 115
9.4 A Infame Instrução Goto... 116
9.4.1 Uma História (muito) Breve ... 116
9.4.2 Utilizando a Instrução Goto ... 116
9.5 A Instrução Return ... 119 9.6 Operadores ... 120 9.6.1 Operadores Lógicos ... 122 9.6.2 Operadores Unários ... 122 9.6.3 Operadores Binários ... 123 9.6.4 Operadores de Atribuição ... 125 9.6.5 Precedência de Operadores ... 126
9.6.6 Uma Confusão Conhecida ... 127
10 Conversão de Valores e Arrays ... 129
10.1 Conversão do Tipo Cast ... 131
10.2 Funções de Conversão de Tipos ... 132
10.2.1 ToBoolean ... 132 10.2.2 ToByte ... 132 10.2.3 ToChar ... 132 10.2.4 ToDateTime ... 132 10.2.5 ToDecimal ... 132 10.2.6 ToDouble ... 133 10.2.7 ToInt16 ... 133 10.2.8 ToInt32 ... 133 10.2.9 ToInt64 ... 133 10.2.10 ToSingle ... 133
10.2.11 ToString ... 133
10.2.12 ToUInt16 ... 133
10.2.13 ToUInt32 ... 133
10.2.14 ToUInt64 ... 133
10.3 Arrays ... 134
10.3.1 Atribuindo Valores aos Arrays ... 134
10.3.2 Arrays Multidimensionais ... 134
10.3.3 Todos os Arrays são Derivados de System.Array ... 135
10.3.4 Redimensionando um Array ... 138 11 Funções Predefinidas ... 139 11.1 Funções Matemáticas ... 139 11.1.1 Abs ... 139 11.1.2 Acos ... 139 11.1.3 Asin ... 139 11.1.4 Atan ... 140 11.1.5 Atan2 ... 140 11.1.6 Ceiling ... 140 11.1.7 Cos ... 140 11.1.8 Cosh ... 140 11.1.9 Exp ... 140 11.1.10 Floor ... 140 11.1.11 IEEERemainder ... 140 11.1.12 Log ... 140 11.1.13 Log10 ... 140 11.1.14 Max ... 141 11.1.15 Min ... 141 11.1.16 Pow ... 141 11.1.17 Round ... 141 11.1.18 Sign ... 141 11.1.19 Sin ... 141 11.1.20 Sinh ... 141 11.1.21 Sqrt ... 141 11.1.22 Tan ... 141 11.1.23 Tanh ... 141
11.2 Utilizando Algumas Funções Matemáticas ... 142
11.2.1 Desenhando Formulário ... 142
11.2.2 Criando Funcionalidades ao Programa ... 143
11.3 Criando um Jogo de Lógica ... 143
11.4 Função para Obter Informações de Arquivos ... 148
11.4.1 Exercício Utilizando essa Função ... 150
11.4.1.1 Desenhando o Formulário ... 150
11.5 Função para Obter Informações de Rede ... 153
11.5.1 Exercício Utilizando essas Funções para Rede ... 154
12 Desvendando Aplicações WinForms ... 157
12.1 Um Exemplo MDI ... 158
12.2 O Projeto SDI ... 161
12.2.1 O Primeiro Passo: Os Forms ... 161
12.2.2 Passando Valores entre os Forms ... 163
12.3 Propriedades de um Form ... 169
12.4 Adicionando Componentes ... 170
12.5 Eventos e Delegações ... 171
12.5.1 Por que Precisamos de Delegates ... 177
12.6 Técnicas de Redimensionamento de Forms ... 178
13 Programação Orientada a Objetos (POO) ... 185
13.1 Objetos ... 186
13.2 Construtores ... 187
13.3 Destrutores ... 187
13.4 Propriedades ... 188
13.5 Herança e Inherit Forms ... 189
13.5.1 Herdando Componentes Visuais ... 190
13.5.2 Sobreposição de Métodos ... 191
13.5.3 Sobrecarga de Métodos ... 193
13.5.4 O Projeto do Form Base ... 194
13.5.5 O Form Filho ... 196
13.5.6 Códigos entre Pai e Filho ... 197
13.6 Polimorfismo ... 201
13.7 Interface ... 203
13.8 Por que é Importante Usar POO? ... 203
14 Criando Componentes ... 205
14.1 Meu Primeiro Componente ... 205
14.2 Evoluindo o Componente ... 207
14 .3 Adicionando Propriedades ao Componente ... 212
15 Input e Output de Arquivos ... 215
15.1 O Namespace System.IO ... 215 15.1.1 Create ... 216 15.1.2 CreateText ... 216 15.1.3 AppendText ... 216 15.1.4 Exists ... 216 15.1.5 Copy ... 217 15.1.6 Move ... 217 15.1.7 Open ... 217 15.1.8 OpenRead ... 218 15.1.9 OpenText ... 218 15.1.10 OpenWrite ... 218 15.1.11 GetAttributes ... 218 15.1.12 SetAttributes ... 219
15.2 A Classe FileInfo ... 219 15.3 A Classe Directory ... 219 15.3.1 CreateDirectory ... 220 15.3.2 Delete ... 220 15.3.3 Exists ... 220 15.3.4 GetDirectories ... 220 15.3.5 GetFiles ... 221 15.3.6 GetLogicalDrives ... 221 15.3.7 GetParent ... 221 15.3.8 Move ... 222 15.3.9 GetCurrentDirectory ... 222 15.3.10 SetCurrentDirectory ... 222 15.4 A Classe DirectoryInfo ... 222 15.5 A Classe Stream ... 222 15.5.1 Close ... 223 15.5.2 Flush ... 223 15.5.3 Read ... 223 15.5.4 ReadByte ... 224 15.5.5 Write ... 224 15.5.6 WriteByte ... 224
15.6 The FileStream Class ... 224
15.6.1 BinaryReader ... 225 15.6.2 BinaryWriter ... 225 15.6.3 Directory ... 225 15.6.4 DirectoryInfo ... 225 15.6.5 File ... 225 15.6.6 FileInfo ... 226 15.6.7 StreamReader ... 226 15.6.8 StreamWriter ... 226 15.7 Aplicando o IO ... 226
15.8 Exemplo Rápido – Abrir e Salvar Streams ... 227
16 Especializando em C# ... 229
16.1 Manipulando Strings ... 229
16.1.1 Imutabilidade e a Classe StringBuilder ... 230
16.1.2 Teste de Performance: String versus StringBuilder ... 231
16.2 Estruturas ... 233
16.2.1 O que Você não Pode Fazer com Struct ... 234
16.3 Tipos Enumerados ... 234
16.4 Aplicações Assíncronas (MSMQ) ... 235
16.4.1 Por que Usar o MSMQ? ... 235
16.4.2 Motivos para se utilizar o MSMQ? ... 236
16.4.3 Cenários Típicos para Comunicação Assíncrona ... 236
16.4.4 Implementando ... 237
16.4.5 Dicas sobre o MS Message Queue ... 237
17 Tratando Exceções ... 243
17.1 Classes de Exceções mais Comuns ... 244
17.2 O Comando Throw ... 245
17.3 Liberando Recursos ... 246
17.3.1 Tipos de Tratamentos de Exceções Suportadas em C# ... 247
17.3.2 Try / Catch / Finally ... 247
17.4 A Classe Exception ... 248 17.5 O Componente ErrorProvider ... 249 18 XML – A Base do .NET ... 251 18.1 Introdução ... 251 18.1.1 Objetivos do Desenvolvimento da XML ... 251 18.2 O Documento XML ... 252
18.3 Uma Agenda – WinForms e XML ... 252
18.4 Classes XML mais Usadas ... 256
19 Trabalhando com Bases de Dados ... 259
19.1 Classes do ADO .NET ... 259
19.1.1 Data Classes ... 259 19.1.2 Managed Providers ... 259 19.1.3 Um Exemplo Prático ... 260 19.1.4 Explicando e Excluindo ... 265 19.2 DataSet ... 267 19.2.1 DataSet Tipado ... 267 19.3 Validações do XSD ... 273 19.3.1 Master-Detail ... 273 19.4 Um Exemplo DataEntry ... 278
19.5 Controlando o Estado do Formulário ... 282
19.5.1 Validações, Formatações e Exceções ... 284
19.6 Realizando Buscas ... 287
19.7 Advanced DataBindings ... 289
19.8 Conectando um Banco MS-Access ... 292
19.8.1 Entendendo Dynamic Properties ... 295
19.9 Classes Data ... 297 19.9.1 System.Data ... 298 19.9.2 System.Data.Common ... 298 19.9.3 System.Data.OleDb ... 298 19.9.4 System.Data.SqlClient ... 299 19.9.5 System.SqlTypes ... 299 20 Aplicações Multiidiomas ... 301
20.1 Adicionando ao Projeto um Arquivo de Resources Padrão ... 301
20.2 Compilando o Arquivo de Resources Padrão ... 303
20.3 Criando Arquivos de Resources Dependentes da Cultura ... 304
20.4 Satellite Assemblies ... 305
20.5 Uma Aplicação Completa ... 306
21 Smart Devices ... 313
21.1 Pocket PC ... 313
21.2 SmartPhones ... 317
Apêndice A ... 329
O Frameworks Class Library (FCL) ... 329
System ... 329 System.CodeDom ... 330 System.CodeDom.Compiler ... 330 System.Collections ... 330 System.Collections.Specialized ... 330 System.ComponentModel ... 330 System.Configuration ... 330 System.Data ... 330 System.EnterpriseServices ... 331 System.Globalization ... 331 System.IO ... 331 System.Messaging ... 331 System.Net ... 331 System.Reflection ... 331 System.Resources ... 331 System.Runtime.CompilerServices ... 332 System.Runtime.InteropServices ... 332 System.Runtime.Remoting ... 332 System.Runtime.Activation ... 332 System.Runtime.Contexts ... 332 System.Runtime.Lifetime ... 332 System.Security ... 332 System.Security.Cryptography ... 333 System.Security.Cryptography.Xml... 333 System.Threading ... 333 System.Timers ... 333 System.Web ... 333 System.Web.Caching ... 333 System.Web.Configuration ... 334 System.Web.Hosting ... 334 System.Web.Mail ... 334 System.Web.Security ... 334 System.Web.Services ... 334 System.Web.SessionState ... 334 System.Web.UI ... 335 System.Web.UI.HTMLControls ... 335 System.Web.UI.WebControls ... 335 System.Windows.Forms ... 335 System.XML ... 335
Apêndice B ... 337
Garbage Collection ... 337
Funcionamento do Gerenciamento de Objetos COM ... 339
Nos Bastidores do Garbage Collector ... 339
Trabalhando em Parceria com o Garbage Collector ... 340
Considerações Finais ... 340 Apêndice C ... 341 O SQL ... 341 Comandos SQL-DML ... 342 Pesquisa (SELECT) ... 342 GROUP BY ... 343 Cláusula HAVING ... 344 Cláusula ORDER BY ... 344
Inserindo (INSERT INTO) ... 344
UPDATE ... 345
Exclusão (DELETE) ... 346
Subconsultas SQL ... 347
Apêndice D ... 351
Exercícios ... 351
Primeiro Problema: Palavras Proibidas ... 351
Segundo Problema: Movendo o Form ... 353
Terceiro Problema: A Calculadora ... 354
Quarto Problema: Chamando uma Função VB .NET em C# ... 355
Quinto Problema: Adicionando uma Nova Característica a um Objeto ... 356
Sexto Problema: Como Copiar e Colar Textos e Imagens com o C#... 359
Sétimo Problema: Trabalhando com Operações de Datas ... 363
Oitavo Problema: Construindo um Visualizador de Imagens ... 370
Nono Problema: Escrevendo um Editor de Texto Simples ... 373
Último Problema: A “Saideira” ... 383
Apêndice E ... 387
Nomes para Componentes (Notação Húngara) ... 387
Windows Forms ... 387 Data ... 389 Bibliografia ... 389 Apêndice F ... 391 Operadores ... 391 Apêndice G ... 393 Caracteres ASCII ... 393