Você está na página 1de 64

Apostila C#

Conceitos B asicos

Universidade Tecnol ogica Federal do Paran a

Diogo Cezar Teixera Batista

Corn elio Proc opio

20 de novembro de 2008

Apostila baseada nas obras de : Fabio R. Galuppo, Edwin Lima, Breno Gontijo e Rudson Kiyoshi

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

Sum ario
1 INTRODUC AO 1.1 Plataforma .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 Abordagem .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitetura .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2.1 1.1.2.2 1.1.2.3 2 A linguagem C# 2.1 Caracter sticas do C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CLR (Commom Language Runtime ) . . . . . . . . . . . . . . . . CLS (Common Language Specication ) . . . . . . . . . . . . . . BCL (Base Classe Library ) . . . . . . . . . . . . . . . . . . . . . 9 9 9 10 10 10 10 10 10 12 12 12 13 14 15 15 16 17 18 18 19 21 23 23 25 26

3 PRIMEIRO PROGRAMA 3.1 Main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 ESTRUTURA DE UM PROGRAMA 5 VARIAVEIS NA LINGUAGEM C# 5.1 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 5.1.2 5.1.3 5.2 Tipos Valor e Tipos Refer encia . . . . . . . . . . . . . . . . . . . . . . . . Convers ao de Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O Objeto Convert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 COMANDOS 6.1 Sele c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 6.1.2 6.2 Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Itera c ao ou Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 6.2.2 6.2.3 Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comandos do e while . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

7 OPERADORES 7.1 7.2 7.3 7.4 Operadores Aritm eticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores de Incremento e Decremento . . . . . . . . . . . . . . . . . . . . . . . Operadores L ogico, Relacional e Condicional . . . . . . . . . . . . . . . . . . . . Opera c ao de Atribui c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26 27 29 30 30 31 31 32 32 32 33 34 34 35 36 36 37 37 38 39 39 40 41 41 43 43 44 45 46 46 47

BASEADA EM OBJETOS 8 PROGRAMAC AO 8.1 Conven c oes e Padr oes de Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 8.1.2 8.2 8.3 8.4 8.5 Nomea c ao de vari aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nomea c ao de classes, m etodos, propriedades, entre outros. . . . . . . . . .

Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modicadores de visibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Heran ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5.1 This e Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.6 8.7 8.8 8.9

Declara c ao e Chamada de M etodos e Objetos . . . . . . . . . . . . . . . . . . . . M etodos e Atributos Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Const e ReadOnly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes e M etodos Abstratos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.10 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11 M etodos Virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.12 Classes e M etodos sealed - Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.13 Ent ao, quando devo utilizar o que? . . . . . . . . . . . . . . . . . . . . . . . . . . 9 TRATAMENTO DE ERROS E EXCEC OES 9.1 9.2 9.3 9.4 9.5 Comando throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloco try - catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloco try - nally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Bloco try - catch - nally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DE ARQUIVOS 10 MANIPULAC AO 10.1 Classes DirectoryInfo e FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.1 Criando diret orios e subdiret orios . . . . . . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

10.1.2 Acessando as propriedades

. . . . . . . . . . . . . . . . . . . . . . . . . .

48 49 49 49 50 51 51 51 52 52 52 53 54 55 56 56 56 57 58 58 59 60 60 61 61 62 62 63 63 64 64

10.2 Criando arquivos usando a classe FileInfo . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Entendendo o m etodo Open() . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.2 Entendendo a classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . 10.2.3 M etodos CreateText() e OpenText() . . . . . . . . . . . . . . . . . . . . . 11 APROFUNDANDO EM WINDOWS FORMS 11.1 Aplica c oes MDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1.1 Adicionando uma nova janela lha . . . . . . . . . . . . . . . . . . . . . . 11.1.2 Fechando uma janela lha . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Aplica c oes SDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1 Exemplo m ultiplos formul arios . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Passando valores entre Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Posicionando os formul arios na tela . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5 Controlando os eventos dos formul arios . . . . . . . . . . . . . . . . . . . . . . . . COM BANCO DE DADOS 12 CONEXAO 12.1 O que e o ADO.NET ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Os namespaces relacionados ao ADO.NET . . . . . . . . . . . . . . . . . . . . . . 12.3 O modelo de execu c ao do ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 O modelo de execu c ao em um ambiente conectado . . . . . . . . . . . . . . . . . 12.5 O modelo de execu c ao em um ambiente desconectado . . . . . . . . . . . . . . .

12.6 Estabelecendo uma conex ao com um banco de dados . . . . . . . . . . . . . . . . 12.7 Criando comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8 Executando comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.1 O m etodo ExecuteNonQuery . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.2 O m etodo ExecuteScalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.3 O m etodo ExecuteReader . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9 Passando par ametros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10O que e um DataSet ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.11O que e um DataAdapter ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.12Criando um DataSet e um DataAdapter . . . . . . . . . . . . . . . . . . . . . . . 12.13Criando e preenchendo um DataSet . . . . . . . . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

Lista de Tabelas
1 2 3 4 5 6 Tipos primitivos do C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de convers ao autom atica . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores do C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes de excess oes mais comuns em C# . . . . . . . . . . . . . . . . . . . . . . Principais classes do System.IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades e m etodos de DirectoryInfo e FileInfo . . . . . . . . . . . . . . . . . 14 16 27 42 47 47

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

Lista de C odigos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hello World em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estrutura de um programa em C# . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de convers ao autom atica de tipos . . . . . . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao do objeto Convert . . . . . . . . . . . . . . . . . . . . . . Sintaxe para a declara c ao de Arrays . . . . . . . . . . . . . . . . . . . . . . . . . Sintaxe para a declara c ao de Arrays com duas ou mais dimens oes . . . . . . . . . Sintaxe para a declara c ao de uma matriz de Arrays com duas ou mais dimens oes Sintaxe para a inicializa c ao de Arrays com duas ou mais dimens oes . . . . . . . . Passando Arrays ` a m etodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo do comando if em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . Ifs com And e Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 13 15 16 17 17 17 17 18 19 19 20 20 20 21 22 23 23 24 25 26 27 28 28 29 30 30 31 31 31 32

Ifs aninhados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curto-circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo if-else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Operador Tern ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Itera c ao for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Itera c ao for (exemplo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Itera c ao foreach (exemplo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Itera c ao do while (exemplo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores Un arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores Bin arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo Operadores Bin arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores de Incremento e Decremento . . . . . . . . . . . . . . . . . . . . . . . Exemplo do operador de nega c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo do operador de atribui c ao . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo do operador de atribui c ao composta . . . . . . . . . . . . . . . . . . . . Exemplo de codica c ao sem qualquer padr ao de nomenclatura . . . . . . . . . . . Exemplo de codica c ao com padr ao de nomenclatura . . . . . . . . . . . . . . . . Exemplo de Classe em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

Exemplo de Propriedades em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao dos modicadores de visibilidade C# . . . . . . . . . . . . Exemplo de declara c ao de heran ca em C# . . . . . . . . . . . . . . . . . . . . . . Exemplo de this e base em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo instancia c ao de objeto em C# . . . . . . . . . . . . . . . . . . . . . . . Exemplo acesso a atributos e m etodos em C# . . . . . . . . . . . . . . . . . . . . Exemplo acesso a atributos e m etodos est aticos em C# . . . . . . . . . . . . . . Exemplo de implementa c ao de uma classe abstrata em C# . . . . . . . . . . . . Exemplo de implementa c ao de uma interface em C# . . . . . . . . . . . . . . . . Exemplo de implementa c ao de uma classe sealed em C# . . . . . . . . . . . . . . Exemplo de utiliza c ao do comando throw . . . . . . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao do bloco try - catch . . . . . . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao do bloco try - nally . . . . . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao do bloco try - catch - nally . . . . . . . . . . . . . . . . . Membros da classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cria c ao de diret orio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cria c ao de subdiret orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades de um diret orio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33 34 35 35 36 36 37 38 38 40 42 43 44 44 46 47 48 48 48 49 49 49 50 51 52 53 53 53 54 54 59 59 60

Criando arquivos com a classe FileInfo . . . . . . . . . . . . . . . . . . . . . . . . Abrindo arquivos com a classe FileInfo . . . . . . . . . . . . . . . . . . . . . . . . Escrevendo/Lendo com FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . CreateText e OpenText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Janela lha (MDI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fechar janela lha (MDI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C odigo para exibir formul ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C odigo para exibir formul ario com show dialog . . . . . . . . . . . . . . . . . . . Vari avel p ublica do tipo string . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modicando o valor da string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modicando o valor da label para um string local . . . . . . . . . . . . . . . . . . Padr ao para Connection Strings Padr ao para Connection Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Exemplo de utiliza c ao do comando SqlCommand . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

65 66 67 68 69 70

Exemplo de utiliza c ao do comando ExecuteNonQuery

. . . . . . . . . . . . . . .

61 61 62 63 64 64

Exemplo de utiliza c ao do comando ExecuteScalar . . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao do comando ExecuteReader . . . . . . . . . . . . . . . . . Exemplo de utiliza c ao de par ametros . . . . . . . . . . . . . . . . . . . . . . . . . Criando um DataSet e um DataAdapter . . . . . . . . . . . . . . . . . . . . . . . Criando e preenchendo um DataSet . . . . . . . . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

INTRODUC AO
Entende-se por uma plataforma de desenvolvimento, um conjunto de instru c oes ordenadas

que tem por objetivo resolver um problema do mundo real, abstraindo-o em um conjunto de comandos l ogicos.

1.1

Plataforma .NET

.NET e a nova plataforma de desenvolvimento da Microsoft que tem como foco principal o desenvolvimento de Servi cos WEB XML. Um servi co Web XML, ou simplesmente Web Service transcende ao que n os conhecemos como p aginas din amicas, as quais podem ser acessadas a partir de um browser. A id eia central de um Web Service consiste em permitir que as aplica c oes, sejam elas da Web ou Desktop, se comuniquem e troquem dados de forma simples e transparente, independente do sistema operacional ou da linguagem de programa c ao. 1.1.1 Abordagem .NET

Independ encia de linguagem de programa c ao : o que permite a implementa c ao do mecanismo de heran ca, controle de exce c oes e depura c ao entre linguagens de programa c ao diferentes; Reutiliza c ao de c odigo legado : o que implica em reaproveitamento de c odigo escrito usando outras tecnologias como COM, COM+, ATL, DLLs e outras bibliotecas existentes; Tempo de execu c ao compartilhado : o runtime de .NET e compartilhado entre as diversas linguagens que a suportam, o que quer dizer que n ao existe um runtime diferente para cada linguagem que implementa .NET; Sistemas auto-explicativos e controle de vers oes : cada pe ca de c odigo .NET cont em em si mesma a informa c ao necess aria e suciente de forma que o runtime n ao precise procurar no registro do Windows mais informa c oes sobre o programa que est a sendo executado. O runtime encontra essas informa c oes no pr oprio sistema em quest ao e sabe qual a vers ao a ser executada, sem acusar aqueles velhos conitos de incompatibilidade ao registrar DLLs no Windows; Simplicidade na resolu c ao de problemas complexos.

Apostila C#

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

10

1.1.2 1.1.2.1

Arquitetura .NET CLR (Commom Language Runtime ) O CLR, ou tempo de execu c ao compar-

tilhado, e o ambiente de execu c ao das aplica c oes .NET. As aplica c oes .NET n ao s ao aplica c oes Win32 propriamente ditas (apesar de executarem no ambiente Windows), raz ao pela qual o runtime Win32 n ao sabe como execut a-las. O Win32, ao identicar uma aplica c ao .NET, dispara o runtime .NET que, a partir desse momento, assume o controle da aplica c ao no sentido mais amplo da palavra, porque, dentre outras coisas, e ele quem vai cuidar do gerenciamento da mem oria via um mecanismo de gerenciamento de mem oria chamado Garbage Collector (GC) ou coletor de lixo. Esse gerenciamento da mem oria torna os programas menos suscept veis a erros. Mais ainda, o CLR como seu pr oprio nome o diz, e compartilhado e, portanto, n ao temos um o mesmo para todo mundo. runtime para VB.NET, outro para C# etc. E 1.1.2.2 CLS (Common Language Specication ) O CLS, ou Especica c aoComumda

Linguagem, e um subconjunto do CTS, e dene um conjunto de regras que qualquer linguagem que implemente a .NET 8 deve seguir a m de que o c odigo gerado resultante da compila c ao de qualquer pe ca de software escrita na referida linguagem seja perfeitamente entendido pelo runtime .NET. 1.1.2.3 BCL (Base Classe Library ) Oferece ao desenvolvedor uma biblioteca consistente

de componentes de software reutiliz aveis que n ao apenas facilitem, mas tamb em que acelerem o desenvolvimento de sistemas.

A linguagem C#
C# (pronunciada C Sharp), e uma linguagem de programa c ao da Plataforma .NET, de-

a linguagem nativa para .NET Common Language rivada de C/C++ orientada ` a objetos. E Runtime (CLR), mecanismo de execu c ao da plataforma .NET. Isso possibilita a conviv encia com v arias outras linguagens especif cadas pela Common Language Subset(CLS). Por exemplo, uma classe base pode ser escrita em C#, derivada em Visual Basic e novamente derivada em C#.

2.1

Caracter sticas do C#

Simplicidade : os projetistas de C# costumam dizer que essa linguagem e t ao poderosa quanto o C++ e t ao simples quanto o Visual Basic.

Apostila C#

10

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

11

Completamente orientada a objetos : em C#, qualquer vari avel tem de fazer parte de uma classe. Fortemente tipada : isso ajudar a a evitar erros por manipula c ao impr opria de tipos, atribui c oes incorretas etc. Gera c odigo gerenciado : assim como o ambiente .NET e gerenciado, assim tamb em e a linguagem C#. Tudo e um objeto : System.Object e a classe base de todo o sistema de tipos de C#. Controle de vers oes : cada assembly gerado, seja como EXE ou DLL, tem informa c ao sobre a vers ao do c odigo, permitindo a coexist encia de dois assemblies hom onimos, mas de vers oes diferentes no mesmo ambiente. Suporte a c odigo legado : o C# pode interagir com c odigo legado de objetos COM e DLLs escritas em uma linguagem n ao-gerenciada. Flexibilidade : se o desenvolvedor precisar usar ponteiros, o C# permite, mas ao custo de desenvolver c odigo n ao-gerenciado, chamado unsafe. Linguagem gerenciada : os programas desenvolvidos em C# executam num ambiente gerenciado, o que signica que todo o gerenciamento de mem oria e feito pelo runtime via o GC (Garbage Collector ), e n ao diretamente pelo programador, reduzindo as chances de cometer erros comuns a linguagens de programa c ao onde o gerenciamento da mem oria e feito diretamente pelo programador.

Apostila C#

11

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

12

PRIMEIRO PROGRAMA
Escrevendo o tradicional programa Hello World, em C#:

C odigo 1: Hello World em C#


1 2 3 4 5 6

using System ; class Hello { public static void Main () { Console . WriteLine ( " } }
Hello W o r l d ! ! ! " );

A cl ausula using referencia a as classes a serem utilizadas, System atua como namespace das classes. O namespace System cont em muitas classes, uma delas e a Console. O m etodo WriteLine, simplesmente emite a string no console.

3.1

Main

O m etodo Main e o ponto de entrada de execu c ao do seu programa. A classe que ser a executada inicialmente possui embutida a fun c ao est atica Main. Uma ou mais classes podem conter a fun c ao Main, entretanto, apenas uma ser a o ponto de entrada, indicada na compila c ao pelo par ametro /main:<tipo>, ou simplicando /m:<tipo>. O m etodo Main, pode ser declarado de 4 formas: 1. Retornando um vazio(void): public static void Main(); 2. Retornando um inteiro(int): public static int Main(); 3. Recebendo argumentos, atrav es de um array de string e retornando um vazio: static void Main(string[] args); 4. Recebendo argumentos, atrav es de um array de string e retornando um inteiro: public static int Main(string[] args). public

ESTRUTURA DE UM PROGRAMA
O esqueleto de um programa em C#, apresentando alguns dos seus elementos mais comuns,

segue abaixo:

Apostila C#

12

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

13

C odigo 2: Estrutura de um programa em C#


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

using System ; namespace MathNamespace { public class MathClass { /* Main : exibe no prompt */ public static void Main ( string [] args ) { Math m = new Math () ; Console . WriteLine ( m . Sum (1 ,1) ) ; } // < summary > Classe Math </ summary > public class Math : Object { public int Sum ( int a , int b ) { return ( a + b ) ; } } } }

A estrutura de um programa em C#, pode ser dividida em um ou mais arquivos, e conter: Namespaces : s ao a forma l ogica de organizar o c odigo-fonte; Tipos: classes, estruturas, interfaces, delega c oes, enums; Membros: constantes, campos, m etodos, propriedades, indexadores, eventos, operadores, construtores; Outros: com entarios e instru c oes.

VARIAVEIS NA LINGUAGEM C#
Na linguagem C# as vari aveis est ao agrupadas em algumas categorias como: Static : existe apenas uma u nica copia desta vari avel para todas as inst ancias de uma classe. Uma vari avel static come ca a existir quando um programa come ca a executar, e deixa de existir quando o programa terminar. Instance : existe uma copia para cada inst ancia de uma classe. Uma vari avel Instance come ca a existir quando uma inst ancia daquele tipo e criado, e deixa de existir quando n ao houver nenhuma referencia aquela inst ancia ou quando e m etodo Finalize e executado. Array : e uma matriz que e criada em tempo de execu c ao.

Apostila C#

13

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

14

5.1

Tipos de dados

Como toda linguagem de programa c ao o C# tamb em apresenta seu grupo de tipos de dados b asico. Esses tipos s ao conhecidos como tipos primitivos ou fundamentais por serem suportados diretamente pelo compilador, e ser ao utilizados durante a codica c ao na deni c ao de vari aveis, par ametros, declara c oes e at e mesmo em compara c oes. A Tabela 1 apresenta os tipos b asicos da linguagem C# relacionados juntamente com os tipos de dados do .NET Em C#, todos eles possuem um correspondente na Common Language Runtime (CLR), por exemplo int, em C#, refere-se a System.Int32. Tabela 1: Tipos primitivos do C# Tipo C# bool byte char decimal Tipo .NET System.Boolean System.Byte System.Char System.Decimal Descri c ao Booleano Inteiro de 8-bit com sinal Caracter Unicode de 16-bit Inteiro de 96-bit com sinal com 28-29 d gitos signicativos double oat int long System.Double System.Single System.Int32 System.Int64 Flutuante IEEE 64-bit com Flutuante IEEE 32-bit com Inteiro de 32-bit com sinal Inteiro de 64-bit com sinal +-5,0 x 10324 a +-1,7 x 10324 +-1,5 x 1045 a +-3,4 x 1038 -2.147.483.648 a 2.147.483.647 -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 Object Sbyte Short String Uint Ulong System.Object System.Sbyte System.Int16 System.String System.UInt32 System.UInt64 Classe base Inteiro de 8-bit sem sinal Inteiro de 16-bit com sinal String de caracteres Unicode Inteiro de 32-bit sem sinal Inteiro de 64-bit sem sinal 0 a 255 -32,768 a 32,767 0 a 4,294,967,295 0 18,446,744,073,709,551,615 Ushort System.UInt16 Inteiro de 16-bit sem sinal 0 a 65,535 a Faixa de dados true ou false -127 a 128 U+0000 a U+ 1,0 x 1028 a 7,9 x 1028

Apostila C#

14

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

15

5.1.1

Tipos Valor e Tipos Refer encia

Os tipos de dados no C# s ao divididos em 3 categorias: Tipos valor(value types ); Tipos refer encia(reference types ); Tipos ponteiro(pointer types ). Tipos valor armazenam dados em mem oria enquanto tipos refer encia armazenam uma refer encia, ou o endere co, para o valor atual. Quando utilizamos uma vari avel do tipo refer encia n ao estaremos acessando seu valor diretamente, mas sim um endere co referente ao seu valor, ao contr ario do tipo valor que permite o acesso diretamente a seu conte udo. Os tipos ponteiro, apenas apontam para um endere co de mem oria. 5.1.2 Convers ao de Tipos

Converter um tipo de dado em n umero ou em literal e comum em situa c oes de programa c ao. Devemos considerar alguns aspectos para a convers ao de n umeros: Como existem diversos tipos de n umeros, inteiros, ponto utuante ou decimal, os valores s ao convertidos sempre para o tipo de maior faixa de valores. Por exemplo, o tipo long e convertido para o ponto utuante, mais e importante ressaltar que o contrario causa um erro. Os tipos de menor faixa s ao convertidos para os de maior faixa. Por exemplo, o tipo int pode ser convertido para: long, oat, double ou decimal. A convers ao dos tipos de ponto utuante(oat, double) para decimal causa erro. A convers ao entre os tipos com sinal e sem sinal de valores inteiros com o mesmo tamanho causa erro. Por exemplo, entre o tipo int e unit. Por exemplo:

C odigo 3: Exemplo de convers ao autom atica de tipos


1

int VarInteiro = 32450;

Apostila C#

15

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

16

2 3 4 5 6 7

long VarLong = VarInteiro ; float VarFloat = VarLong ; double VarDouble = VarFloat ; decimal VarDecimal = VarLong ; byte VarByte = ( byte ) VarInteiro ; int VarInteiro = ( int ) 31.245 F ;

Tabela 2: Tipos de convers ao autom atica Tipo sbyte byte short ushort int uint long ulong char oat Converte em short, int, long, oat, double, decimal short, ushort, int, uint, long, ulong, oat, double, decimal int, long, oat, double, decimal int, uint, long, ulong, oat, double, decimal long, oat, double, decimal long, ulong, oat, double, decimal oat, double, decimal long, double, decimal ushort, int, uint, long, ulong, oat, double, decimal double

5.1.3

O Objeto Convert

Em C# temos o objeto Convert que e usado para converter um tipo de dado em outro. Os tipos de dados suportados s ao: Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime e String. Por exemplo:

C odigo 4: Exemplo de utiliza c ao do objeto Convert


1 2 3 4 5 6

double dNumber = 23.15;

int bool

iNumber = System . Convert . ToInt32 ( dNumber ) ; bNumber = System . Convert . ToBoolean ( dNumber ) ;

String strNumber = System . Convert . ToString ( dNumber ) ; char chrNumber = System . Convert . ToChar ( strNumber [0]) ;

Apostila C#

16

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

17

5.2

Arrays

Um tipo array e uma matriz de valores do mesmo tipo, que e criada em tempo de execu c ao, podendo ser acessada por meio de um ndice. A declara c ao do array sempre faz o uso de um colchete( [ ] ) depois do tipo da vari avel. O uso da instru c ao new sempre deve ser utilizado, pois e obrigat orio. O tipo array pode ter diversas dimens oes, o tamanho desta e denido pelo desenvolvedor, mas devemos saber que o primeiro ndice e sempre zero. No tipo array devemos sempre inicializar seus elementos, pois e obrigat orio tamb em. Veja abaixo a forma de sintaxe para a declara c ao de arrays.

C odigo 5: Sintaxe para a declara c ao de Arrays


1 2 3 4

< TIPO >[ ] NomeDoArray = new < TIPO > [ tamanho do array ];

float [] ValorIndice = new float [10]; string [] ElementoVetor = new string [10];

C odigo 6: Sintaxe para a declara c ao de Arrays com duas ou mais dimens oes
1 2 3 4

< TIPO > [ ,] NomeDoArray = new < TIPO > [ tamanho do array , tamanho do array ];

float [ ,] ValorIndice = new float [10 ,10]; string [ , ,] ElementoVetor = new string [10 ,10 ,10];

C odigo 7: Sintaxe para a declara c ao de uma matriz de Arrays com duas ou mais dimens oes
1 2 3 4

< TIPO > [][] NomeDoArray = new < TIPO > [ tamanho do array ] [ tamanho do array ];

float [][] ValorIndice = new float [10][10]; string [][][] ElementoVetor = new string [10][10][10];

C odigo 8: Sintaxe para a inicializa c ao de Arrays com duas ou mais dimens oes
1 2 3

< TIPO > [] NomeDoArray = new < TIPO > [ tamanho do array ]{ valores separados por ,};

float [] ValorIndice = new float [5]{1.25 ,2 ,3.23 ,1.32 ,5};

Apostila C#

17

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

18

4 5 6 7 8 9 10

string [ ,] ElementoVetor = new string [3 ,3] {{ " {"


ab "

ab "

" ac "

" bc "}

" ac "

" bc "

}};

int [][] MatrizDeInteiro = new int [2][]; MatrizDeInteiro [ 0 ] = new int [ 5 ] {1 ,3 ,5 ,7 ,9}; MatrizDeInteiro [ 1 ] = new int [ 4 ] {2 ,4 ,6 ,8};

Para passar um argumento array para um m etodo, especique o nome do array sem usar colchetes e para que um m etodo receba um array, a lista de par ametros deve especicar que um array ser a recebido. Veja o seguinte exemplo:

C odigo 9: Passando Arrays ` a m etodos


1 2 3 4

int [] vetor = {10 , 20 , 30 , 40 , 50}; Array . IndexOf ( vetor , 22) ;

public void ExibeVetor ( int [] vetor ) ;

Algumas Propriedades e M etodos dos Arrays: obj.Length Tamanho do vetor; Array.IndexOf(Array vetor, object value) Procura a primeira ocorr encia de valor em vetor; Array.LastIndexOf(Array vetor, object value) Procura a u ltima ocorr encia de valor em vetor; Array.Sort(Array vetor) Ordena um vetor crescentemente; Array.Reverse(Array vetor) Ordena um vetor decrescentemente.

6
6.1

COMANDOS
Sele c ao

Os comandos de sele c ao s ao utilizados na escolha de uma possibilidade entre uma ou mais poss veis. Os comandos if e switch fazem parte deste grupo. Apostila C# 18

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

19

6.1.1

Comando if

O comando if utiliza uma express ao, ou express oes, booleana para executar um comando ou um bloco de comandos. A cl ausula else e opcional na utiliza c ao do if , no entanto, seu uso e comum em decis oes com duas ou mais op c oes.

C odigo 10: Exemplo do comando if em C#


1 2 3 4 5 6 7 8 9 10 11 12 13

// if com uma u nica possibilidade . Exibe a string " Verdadeiro " no Console caso a // express~ a o ( a == true ) seja verdadeira if ( a == true ) { System . Console . Write ( " } // if com uma u nica possibilidade . Exibe a string " Verdadeiro " no Console caso a // express~ a o ( a == true ) seja verdadeira , sen~ a o exibe a string " Falso " if ( a == true ) { System . Console . Write ( " } else { System . Console . Write ( " }
F a l s o " ); V e r d a d e i r o " ); V e r d a d e i r o " );

Toda express ao do comando if deve ser embutida em par enteses (()) e possui o conceito de curto-circuito (short-circuit ). Isto quer dizer que se uma express ao composta por And (&&), fornecer na sua primeira an alise um valor booleano false (falso), as restantes n ao ser ao analisadas. Este conceito e v alido para todas express oes booleanas. Por exemplo:

C odigo 11: Ifs com And e Or


1 2 3 4 5 6 7 8 9

// && ( And ) . Somente a primeira fun c~ ao e executada if ( MyFunc () && MyFunc2 () ) ;

// || ( Or ) . Ambas fun c~ o es s~ a o executadas if ( MyFunc () || MyFunc2 () ) ;

public static bool MyFunc () { return false ; }

public static bool MyFunc2 () { return true ; }

Apostila C#

19

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

20

Assim como outros comandos. O if tamb em pode ser encontrado na forma aninhada.

C odigo 12: Ifs aninhados


1 2 3 4 5 6 7

if ( x ==1) { if ( y ==100) { if ( z ==1000) { System . Console . Write ( " } } }


O K " );

Por em, devido a caracter stica de curto-circuito nas express oes, as linhas de cima podem e devem ser reescritas para:

C odigo 13: Curto-circuito


1

if ( x ==1 && y ==100 && z ==1000) System . Console . Write ( "

O K " );

O comando if tamb em pode ser encontrado num formato escada if-else-if , quando existem mais do que duas possibilidades. Por em, na maioria destes casos, se as express oes n ao forem compostas ou utilizarem de fun c oes, a cl ausula switch substitui este tipo de constru c ao.

C odigo 14: Exemplo if-else-if


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

using System ; class Ifs { public static void Main () { char chOpt ; Console . WriteLine ( " 1 Console . WriteLine ( " 2 Console . WriteLine ( " 3 Console . WriteLine ( " 4 Console . Write ( "
I n s e r i r " ); A t u a l i z a r " ); A p a g a r " ); P r o c u r a r " ); entre [1] a [ 4 ] : " );

Escolha

// Verifica se os valores entrados esta entre 1 e 4 // caso contr a rio pede reentrada do { chOpt = ( char ) Console . Read () ; } while ( chOpt < 1 if ( chOpt == 1 ) {

|| chOpt > 4 ) ;

Apostila C#

20

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

21

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Console . WriteLine ( " // InsertFunction () ; } else if ( chOpt == 2 ) { Console . WriteLine ( " // UpdateFunction () ; } else if ( chOpt == 3 ) { Console . WriteLine ( " // DeleteFunction () ; } else { Console . WriteLine ( " // FindFunction () ; } }

I n s e r i r . . . " );

A t u a l i z a r . . . " );

A p a g a r . . . " );

P r o c u r a r . . . " );

O comando if com a cl ausula else u nica pode ser encontrado em sua forma reduzida com chamado de operador tern operador tern ario representado por interroga c ao (?:). E ario por possuir 3 express oes: a primeira refere-se a condi c ao boolena, a segunda se a condi c ao e verdadeira e a terceira se a condi c ao e falsa.

C odigo 15: Operador Tern ario


1 2 3 4 5 6 7 8 9

int x ; if ( f == true ) x = 100; else x = 1000;

// As linhas acima podem ser substitu das por :

int x = f == true ?100:1000;

6.1.2

Comando switch

O comando switch utiliza o valor de uma determina express ao contra uma lista de valores constantes para execu c ao de um ou mais comandos. Os valor constante e tratado atrav es da cl ausula case e este pode ser n umerico, caracter ou string. A cl ausula default e utilizada para Apostila C# 21

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

22

qualquer caso n ao interceptado pelo case. O exemplo abaixo implementa a vers ao com o comando switch do exemplo, previamente mostrado com o comando if :

C odigo 16: Comando switch


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

using System ; class Switchs { public static void Main () { char chOpt ; Console . WriteLine ( " 1 Console . WriteLine ( " 2 Console . WriteLine ( " 3 Console . WriteLine ( " 4 Console . Write ( "
I n s e r i r " ); A t u a l i z a r " ); A p a g a r " ); P r o c u r a r " ); entre [1] a [ 4 ] : " );

Escolha

// Verifica se os valores entrados esta entre 1 e 4 // caso contr a rio pede reentrada do { chOpt = ( char ) Console . Read () ; } while ( chOpt < 1 switch ( chOpt ) { case
1 : I n s e r i r . . . " );

|| chOpt > 4 ) ;

Console . WriteLine ( " // InsertFunction () ; break ; case


2 :

Console . WriteLine ( " // UpdateFunction () ; break ; case


3 :

A t u a l i z a r . . . " );

Console . WriteLine ( " // DeleteFunction () ; break ; default : Console . WriteLine ( " // FindFunction () ; } }

A p a g a r . . . " );

P r o c u r a r . . . " );

Uma ou mais cl ausulas case podem ser encontradas seguidamente quando mais do que uma op c ao e permitida para um comando ou bloco de comandos. O exemplo abaixo apresenta essa

Apostila C#

22

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

23

condi c ao:

C odigo 17: Comando switch


1 2 3 4 5 6 7 8 9 10 11

switch ( sProduct ) { case case


" Windows " Windows 2000 ": NT ": Sistema O p e r a c i o n a l " );

System . Console . Write ( " break ; case


" MSDE ":

System . Console . Write ( " goto case case


" SQL " SQL

Mecanismo

S i m p l i f i c a d o " );

Server ";

Server ": Banco de D a d o s " );

System . Console . Write ( " }

A cl ausula break , e utilizada para separar os blocos do switch e garante que o bloco seja executado somente at e determinado ponto.

6.2

Itera c ao ou Loop

Conhecidos como la co ou loop, os comandos de itera c ao executam repetidamente um comando ou bloco de comandos, a partir de uma determinada condi c ao. Esta condi c ao pode ser pr e-denida ou com nal em aberto. Em C#, fazem parte dos comandos de itera c ao: while , do , for e foreach . 6.2.1 Comando for

O comando for possui 3 declara c oes opcionais, separadas por ponto e v rgula (;), dentro dos par enteses: inicializa c ao, condi c ao e a itera c ao. Em cada par ametro, mais de uma express ao pode ser encontrada separada por v rgula.

C odigo 18: Itera c ao for


1 2 3 4 5 6

for ( int x =0; x < 100; ++ x ) { System . Console . WriteLine ( x ) ; } for (;;) { // La c o infinito System . Console . WriteLine ( " }
Hello , W o r l d ! " );

Apostila C#

23

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

24

7 8 9

for ( int y =100 , int x = 0; x < y ; ++ x , --y ) { // La c o com mais de 1 vari a vel System . Console . WriteLine ( y ) ; }

Quando a cl ausula for e processada pela primeira vez, se presente, a express ao ou express oes da declara c ao inicializadora s ao executadas na ordem que elas est ao escritas, este passo ocorre apenas uma vez. Se a declara c ao condicional estiver presente, ser a avaliada, caso contr ario o for assume o valor verdadeiro (true). Na avalia c ao, se o valor obtido for verdadeiro (true) o comando ou bloco de comandos associados ser ao executados, ao seu nal a terceira declara c ao ou declara c ao de itera c ao e processada e, ent ao, novamente a declara c ao condicional e processada. Este uxo ocorre continuamente at e que a declara c ao condicional seja avaliada como falsa (false) ou o comando break seja encontrado, como visto anteriormente. O comando continue for ca uma nova itera c ao.

C odigo 19: Itera c ao for (exemplo)


1 2 3 4 5

using System ; class Fibonacci { public static void Main () { int iVezes ; Console . Write ( "
de Entre de 1 a 100 para o n de elementos a exibir na sequ^ encia

F i b o n a c c i : " );

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

// Verifica se os valores entrados esta entre 1 e 100 // caso contr a rio pede reentrada do { iVezes = Console . ReadLine () . ToInt32 () ; } while ( iVezes <1 || iVezes >100) ; // Cria o vetor din^ a micamente int [] iSeq = new int [ iVezes ]; iSeq [0] = 1; // Preenche o vetor if ( iVezes > 1) { iSeq [1] = 1; for ( int a =2; a < iVezes ; ++ a ) iSeq [ a ] = iSeq [a -1] + iSeq [a -2]; } // Exibe o vetor for ( int a =0; a < iVezes ; ++ a ) { Console . Write ( iSeq [ a ]) ;

Apostila C#

24

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

25

23 24 25 26

Console . Write ( " } } }

" );

6.2.2

Comando foreach

O comando foreach enumera os elementos de uma cole c ao. O c odigo abaixo implementa a funcionalidade do exemplo anterior:

C odigo 20: Itera c ao foreach (exemplo)


1 2 3 4 5

using System ; class Fibonacci { public static void Main () { int iVezes ; Console . Write ( "
de Entre de 1 a 100 para o n de elementos a exibir na sequ^ encia

F i b o n a c c i : " );

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

// Verifica se os valores entrados esta entre 1 e 100 // caso contr a rio pede reentrada do { iVezes = Console . ReadLine () . ToInt32 () ; } while ( iVezes <1 || iVezes >100) ; // Cria o vetor din^ a micamente int [] iSeq = new int [ iVezes ]; iSeq [0] = 1; // Preenche o vetor if ( iVezes > 1) { iSeq [1] = 1; for ( int a =2; a < iVezes ; ++ a ) iSeq [ a ] = iSeq [a -1] + iSeq [a -2]; } // Exibe o vetor foreach ( int a in iSeq ) { Console . Write ( a ) ; Console . Write ( " } } }
" );

Apostila C#

25

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

26

6.2.3

Comandos do e while

Os comandos do e while t em caracter sticas semelhantes. Ambos executam condicionalmente um comando ou bloco de comandos. No entanto, o comando do pode ser executado uma ou mais vezes e o comando while pode ser executado nenhuma ou mais vezes, isto ocorre porque a express ao condicional do comando do e encontrada no nal do bloco.

C odigo 21: Itera c ao do while (exemplo)


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

// Comando while : int a = 0; bool f = true ; while ( f ) {

if (++ a ==100) f = true ; System . Console . WriteLine ( a ) ; } // Comando do ... while : int a = 0; bool f = true ; do { if (++ a ==100) f = true ; System . Console . WriteLine ( a ) ; } while ( f ) ;

OPERADORES
C# e uma linguagem muito rica em operadores. Estes representados por s mbolos s ao

utilizados na constru c ao de express oes. A sintaxe de express ao do C# e baseada na sintaxe do C++. Os operadores s ao categorizados em diversas funcionalidades. A tabela 3 apresenta essas divis oes. Quando uma express ao possui m ultiplas opera c oes, a preced encia dos operadores e levada em considera c ao na avalia c ao da mesma. Normalmente, as express oes s ao avaliadas da esquerda para direita, exceto para opera c oes de atribui c ao e condicional, por em a preced encia pode ser alterada atrav es do uso do par enteses.

Apostila C#

26

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

27

Tabela 3: Operadores do C# Categoria Aritm etica L ogica (boolena e bitwise) Concatena c ao de string Incremento e decremento Shift Relacional Atribui c ao Acesso a membro Indexa c ao Indexa c ao Condicional Delegate (concatena c ao e remo c ao) Delegate (concatena c ao e remo c ao) Informa c ao de tipo Controle de excess ao de overow Indire c ao e endere co Operadores &+-*/% &|! + ++ << >> == != <> <= >= = += -= *= /= %= &= = = <<= >>= . [] () ?: +new is sizeof typeof checked unchecked * - [] & && || true false

7.1

Operadores Aritm eticos

Os operadores aritm eticos s ao utilizados na maioria das express oes para execu c ao de c alculos. Numa express ao, eles podem produzir resultados fora da faixa de valores. Neste caso, uma excess ao como OverowException e gerada. Os operadores un arios (atribu dos a 1 atributo) + e - s ao utilizados para representar se o n umero e positivo ou negativo, respectivamente.

C odigo 22: Operadores Un arios


1 2

x = +1000 // x = 1000 x = -1000 // x = -1000

Os operadores bin arios +, -, *, / e % s ao utilizados nas express oes para execu c ao de c alculos tais como soma, subtra c ao, multiplica c ao, divis ao e sobra. O operador bin ario + quando utilizado entre strings representam concatena c ao. No entanto, quando existem strings e n umeros na Apostila C# 27

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

28

express ao e nenhuma opera c ao de cast for executada a opera c ao e tratado como concatena c ao. O operador bin ario % e computado atrav es da f ormula dividendo - ( dividendo / divisor ) * divisor. Os exemplos abaixo ilustram essas condi c oes:

C odigo 23: Operadores Bin arios


1 2 3

string x = string x = int

" Hello " " Valor =

+
"

" World "

// x = " HelloWorld " // x = " Valor = 100" // x = 10

+ 100

x = 1000 % 11

O c odigo abaixo utiliza os operadores aritm eticos. Note a utiliza c ao e recebimento de argumentos atrav es da linha de comando. O entry-point Main permite ser passado um vetor de strings como par ametro. O m etodo Length conta o n umero de par ametros passado, ignorando o execut avel. Como todo vetor o primeiro par ametro e representado pelo ndice zero, por exemplo args[0]. A v ariavel args n ao e uma palavra-chave, portanto, esta pode ser alterada:

C odigo 24: Exemplo Operadores Bin arios


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

using System ; class Arithmetics { public static void Main ( string [] args ) { // Verifica o n u mero de argumentos entrados if ( args . Length == 3) { int x =0 , y =0; // Convertem os valores dos argumentos 2 e 3 para inteiro 32 - bit // Se ocorrer algum erro o modo de utiliza c~ ao try { x = args [1]. ToInt32 () ; y = args [2]. ToInt32 () ; } catch { usage () ; return ; } // Efetua a opera c~ a o selecionada no primeiro argumento switch ( args [0]) { case
" + ": Valor da soma = {0} "

Console . Write ( " break ;

, x+y);

Apostila C#

28

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

29

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

case

" -": Valor da subtra c~ ao = {0} "

Console . Write ( " break ; case


" / ":

, x-y);

Console . Write ( " break ; case


" * ":

Valor

da

divis~ ao

{0} "

, x/y);

Console . Write ( " break ; case


" % ":

Valor

da

multiplica c~ ao

{0} "

, x*y);

Console . Write ( " break ; default : usage () ; } else { usage () ; } }

Valor

da

sobra

{0} "

, x%y);

public static void usage () { // Modo de utiliza c~ ao Console . WriteLine ( " Console . WriteLine ( " } }
Modo Ex .: de usar : Arithmetics + 100 operador valor1 v a l o r 2 " );

Arithmetics

2 0 0 " );

7.2

Operadores de Incremento e Decremento

Os operadores ++ e aumentam ou diminuem por um o valor correspondente. O ponto chave e que se o operador for utilizado ` a esquerda da vari avel, ou seja prexado, o valor e adicionado ou subtra do de um antes de sua utiliza c ao.

C odigo 25: Operadores de Incremento e Decremento


1 2 3 4 5

int x = 1000; // x = 1000 x ++; int y = x ++; x - -; y = --x ; // x = 1001 // x = 1002 , y = 1001 // x = 1001 // x = 1000 , y = 1000

Apostila C#

29

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

30

6 7 8

++ x ; --x ; y = ++ x ;

// x = 1001 // x = 1000 // x = 1001 , y = 1001

7.3

Operadores L ogico, Relacional e Condicional

Esses operadores s ao utilizados em express oes onde o resultado retornado ou a caracter stica e booleana. O operador de nega c ao ! retorna o complemento de um valor booleano.

C odigo 26: Exemplo do operador de nega c ao


1 2 3

bool x = true ; bool y = ! x // y = false ; if (! y ) System . Console . Write ( " y


e v e r d a d e i r o " );

Os operadores relacionais ==, !=, , , =, =, resultam em um valor booleano e representam igual, n ao igual ou diferente, menor, maior, menor ou igual e maior ou igual, respectivamente. Por exemplo, a == b quer dizer se a for igual a b, isto e totalmente v alido na express ao com tipos primitivos(value types ), tais como int, long, char, entre outros. Por em o comportamento dos operadores == e != s ao diferenciados quando utilizado entre structs (value types ) e classes (reference types ). Para structs a compara c ao deve levar em considera c ao todos os campos da estrutura. Para classes a compara c ao e efetuada pelo endere co, ou refer encia, da classe. O u nico reference type que compara o valor e n ao a refer encia e a string ou a classe System.String, pois os operadores == e != s ao sobrecarregados. A sobrecarga pode alterar o comportamento padr ao dos operadores.

7.4

Opera c ao de Atribui c ao

Estes operadores, divididos entre simples e compostos, s ao utilizados na designa c ao de um valor para uma vari avel. O operador = representa a atribui c ao simples, ou seja uma vari avel do lado esquerdo recebe o cont eudo de um valor, de uma vari avel ou do resultado de uma express ao do lado direito.

C odigo 27: Exemplo do operador de atribui c ao


1

int x = 10;

Apostila C#

30

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

31

2 3

int y = x ; int z = x + y ;

Os operadores +=, -=, *=, /=, %=, &=, =, =, c ao = e = representam a atribui composta, que normalmente atuam como um atalho na constru c ao de uma express ao.

C odigo 28: Exemplo do operador de atribui c ao composta


1 2

x = x + 10; // Pode ser escrito como : x += 10; // x <op >= < valor >

8
8.1

BASEADA EM OBJETOS PROGRAMAC AO


Conven c oes e Padr oes de Nomenclatura

As conven c oes e padr oes de nomenclatura auxiliam o desenvolvedor na organiza c ao, localiza c ao e manuten c ao de seus c odigos. Imagine como seria encontrar a seguinte codica c ao:

C odigo 29: Exemplo de codica c ao sem qualquer padr ao de nomenclatura


1 2 3 4 5 6 7 8

using System ; class c l a s s e p a r a c a d a s t r o d e c l i e n t e s { private int j ; private int n ; private string str ; public adicionarcliente ( string s ) { } }

Observe a diferen ca, se utilizarmos algumas regras de nomenclatura:

C odigo 30: Exemplo de codica c ao com padr ao de nomenclatura


1 2 3 4 5 6

using System ; class C l a s s eC a d a s t r o d e C l i e n t e s { private int numFilhos ; private int numBens ; private string nomeCompleto ; public adicionarCliente ( string cliente ) {

Apostila C#

31

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

32

7 8

} }

Ap os aplicadas as regras de nomenclaturas, al em de saber o que signica cada vari avel e m etodo, conseguimos ler sem diculdade as palavras sem os espa cos que as separam. Para a nomenclatura de classes, como visto no exemplo, deve-se utilizar o seguinte padr ao: Primeiro caractere de cada palavra em caixa alta. Chamada de nota c ao PascalCasing. Para a nomenclatura de m etodos, utiliza-se: Primeira letra de cada palavra em caixa alta, menos da primeira. Chamada de nota c ao camelCasing. 8.1.1 Nomea c ao de vari aveis

Recomenda c ao da Microsoft para nomea c ao de vari aveis: Evite usar underline ; N ao crie vari aveis com o mesmo nome mudando somente entre mai usculas e min usculas; Utilize nomes de vari aveis com min usculas; Evite utilizar todas as letras mai usculas (normalmente utilizado para denir constantes); Nota c ao camelCasing. 8.1.2 Nomea c ao de classes, m etodos, propriedades, entre outros.

Recomenda c oes para nomea c ao de classes, m etodos, propriedades, enumeradores, interfaces, constantes, campos somente leitura e namespace: Nota c ao PascalCasting.

8.2

Classes

Uma classe e um poderoso tipo de dado em C#. Como estrutura, uma classe dene os dados e o comportamento dos tipos de dados. Uma classe em C# tem a seguinte estrutura:

C odigo 31: Exemplo de Classe em C#


1 2 3

class NomeDaClasse { // Defini c~ a o dos atributos private int atrib1 ;

Apostila C#

32

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

33

4 5 6 7 8 9 10 11 12

private string atrib2 ; // M e todo construtor public NomeDaClasse ( int param1 , string param2 ) { } // Defini c~ a o dos m e todos public tipoRetorno MetodoUm ([ lista de par^ a metros ]) { return [ valor ]; } }

Os atributos denem atrav es de tipos de dados as caracter sticas que um objeto venha a apresentar. Em uma classe Carro, por exemplo, poder amos armar que cor, peso e modelo seriam seus atributos. O m etodo construtor sempre e chamado quando se cria um novo objeto, ele pode ou n ao conter uma assinatura. Os outros m etodos denem atrav es de rotinas as a c oes que um objeto venha a apresentar, No exemplo citado acima, uma classe Carro poderia conter os m etodos: acelerar, frear e ligar.

8.3

Propriedades

As propriedades s ao recursos fornecidos pelas classes para que seja poss vel alterar seus valores. Os recursos get e set comuns ` as propriedades. Veja como e poss vel se denir esses recursos:

C odigo 32: Exemplo de Propriedades em C#


1 2 3 4 5 6 7 8 9 10 11

public tipodedado NomeDaProp riedade { get { return nomeAtributo ; } set { nomeAtributo = value ; } } // Utiliza - se da seguinte maneira this . N omeDaP ropriedade = valor ; valor = this . NomeDaPro priedade ;

Apostila C#

33

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

34

8.4

Modicadores de visibilidade

C# apresenta os seguintes modicadores de visibilidades: 1. private : Signica que, exceto a classe inclu da, nada pode acessar o objeto, m etodo ou vari avel; 2. public : Signica que todos t em acesso livre a este membro; 3. protected : Signica que s ao apenas vis veis para as classes derivadas por meio de heran ca; 4. internal : todos t em acesso livre a este membro dentro de um assembly (DLL ou EXE; correspondente ao JAR do Java). Fora do assembly a classe e inacess vel. Atributos internal, s ao utilizados geralmente para a cria c ao de bibliotecas, j a que uma biblioteca pode ter v arios namespaces. O exemplo a seguir mostra como devemos dispor os modicadores de visibilidade:

C odigo 33: Exemplo de utiliza c ao dos modicadores de visibilidade C#


1 2 3 4 5 6 7

class NomeDaClasse { private public int atrib1 ; int atrib2 ;

protected int atrib3 ; internal ... } int atrib4 ;

8.5

Heran ca

A heran ca e um recurso utilizado para derivar classes que t em m etodos ou atributos em comum. Sua principal vantagem e o reaproveitamento de c odigo. Para ilustrar a utiliza c ao do recurso de heran ca, imagine a seguinte situa c ao: [?]m um determinado programa, deve-se implementar as seguintes classes: Fornecedor(id, cnpf, rua, numero, bairro, telefone, email, gerente) e Cliente(id, cpf, rua, numero, bairro, telefone, email, limiteDeCompras). O programa deve cadastrar essas informa c oes, bem como consulta-las e imprimi-las. Se o programador optar por utilizar heran ca, os atributos e m etodos em comum:

Apostila C#

34

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

35

Atributos: rua; numero; bairro; telefone; email. Metodos: cadastrar(); consultar(); imprimir(). Poderiam ser escritos em uma Pai chamada Pessoa que derivaria as duas classes lhas Fornecedor e Cliente. Em C# todas as classes derivam da classe Object. Sua declara c ao deve acontecer da seguinte maneira:

C odigo 34: Exemplo de declara c ao de heran ca em C#


1 2 3

class NomeDaClasse : ClasseBase { ... }

8.5.1

This e Base

As cl ausulas this e base s ao refer encias que indicam a propria classe e a classe base, respectivamente. Entende-se como classe base, a classe cuja a classe atual herda as propriedades e atributos. Sua nota c ao pode ser observada no seguinte exemplo:

C odigo 35: Exemplo de this e base em C#


1 2 3

this . nomeAtributo = valor ; valor = this . nomeAtributo ; this . NomeMetodo () ;

Apostila C#

35

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

36

4 5 6 7

base . n o m e A t r i b u t o C l a s s e B a s e = valor ; valor = base . n o m e A t r i b u t o C l a s s e B as e ; base . N o m e Me t o d o C l a s s e B a s e () ;

8.6

Declara c ao e Chamada de M etodos e Objetos

Para se instanciar um objeto deve-se utilizar a opera c ao new. Essa opera c ao atribui um <objeto> montado dentro de uma vari avel do tipo <objeto>. Utiliza-se a seguinte nota c ao:

C odigo 36: Exemplo instancia c ao de objeto em C#


1

MinhaClasse obj = new MinhaClasse () ;

Para acessar seus atributos e m etodos utilizamos a instru c ao ., como pode ser observado no exemplo a seguir:

C odigo 37: Exemplo acesso a atributos e m etodos em C#


1 2 3

obj . nomeMetodo () ; obj . nomeAtributo = 23; obj . NomePropriedade =


" Apenas um teste ";

Entretanto como j a foi explanado, atributos com modicador de acesso do tipo private n ao possibilitam o acesso direto, para isso devemos utilizar as propriedades explanadas na sess ao 8.3.

8.7

M etodos e Atributos Static

A opera c ao static dene um m etodo ou atributo como pertencentes ` a classe em quest ao e n ao aos objetos, assim sendo esses atributos ou m etodos ter ao apenas 1 c opia para n objetos que gerarem. Sua declara c ao e feita com a palavra static depois do modicador de acesso (public, private ) e antes do tipo de dado (int, string ). O seu acesso e feito pelo nome da classe e n ao mais pela refer encia da classe ou pelo nome do objeto. Veja no exemplo: Apostila C# 36

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

37

C odigo 38: Exemplo acesso a atributos e m etodos est aticos em C#


1 2 3

NomeDaClasse . atributoEstatico = valor ; valor = NomeDaClasse . atributoEstatico ; NomeDaClasse . MetodoEstatico () ;

8.8

Const e ReadOnly

S ao operadores utilizados para a cria c ao de constantes, cujos os valores n ao poder ao ser alterados durante a execu c ao do programa. Algumas diferen cas entre os operadores: const : N ao pode ser est atico (static ); O valor e setado em tempo de compila c ao; inicializado somente na compila E c ao. readonly : Pode ser est atico (static ); O valor e setado em tempo de execu c ao; Pode ser inicializado na declara c ao ou na codica c ao do construtor.

8.9

Classes e M etodos Abstratos

A classe abstrata e um tipo de classe que somente pode ser herdada e n ao instanciada, de certa forma pode se dizer que este tipo de classe e uma classe conceitual que pode denir funcionalidades para que as suas subclasses (classes que herdam desta classe) possam implementa-las de forma n ao obrigat oria, ou seja ao se denir um conjunto de m etodos na classe abstrata n ao e de total obrigatoriedade a implementa c ao de todos os m etodos em suas subclasses, em uma classe abstrata os m etodos declarados podem ser abstratos ou n ao, e suas implementa c oes devem ser obrigat orias na subclasse ou n ao, quando criamos um m etodo abstrato em uma classe abstrata sua implementa c ao e obrigat oria, caso voc e n ao implemente o mesmo o compilador criar a um erro em tempo de compila c ao. O mesmo se t em com m etodos abstratos, n ao se pode herda-los.

Apostila C#

37

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

38

C odigo 39: Exemplo de implementa c ao de uma classe abstrata em C#


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

abstract class formaClasse { abstract public int Area () ; } class quadrado : formaClasse { int x , y ; // Se n~ a o for implementado o m e todo Area () // ser a gerado um compile - time error . // Utiliza - se o operador override para indicar a sobrescrita . public override int Area () { return x * y ; } }

8.10

Interfaces

As interfaces s ao fundamentais em um sistema orientado a objetos, quando dizemos que um objeto e a instancia de uma classe, na verdade queremos dizer, que este objeto implementa a interface denida pela classe, ou seja uma interface dene as opera c oes que um objeto ser a obrigado a implementar. Para cada opera c ao declarada por um objeto deve ser especicado o nome da opera c ao, os objetos que esta opera c ao aceita como par ametro e o tipo de valor retornado pela opera c ao; este conjunto de informa c oes sobre uma determinada opera c ao tem o nome de assinatura da opera c ao, e um conjunto de assinaturas de opera c oes d a-se o nome de interface. importante lembrar que uma interface nunca cont E em implementa c ao, ou seja numa interface n ao se pode denir campos, pois o mesmo e uma implementa c ao de um atributo objeto, a interface tamb em n ao permite construtores pois num contrutor temos as instru c oes usadas para inicializar campos. Para podermos usar uma interface devemos criar uma classe ou estrutura e herdar da interface, com isso e obrigat orio implementar todos os m etodos da interface.

C odigo 40: Exemplo de implementa c ao de uma interface em C#


1 2

interface IExe mploInterfa ce {

Apostila C#

38

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

39

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

void ExemploMetodo () ; } class I m p le m e n ta c a oC l a s se : IE xemploInterface { // Implementa c~ a o explicita da interface void IE xempl oInte rface . ExemploMetodo () { // Implementa c~ a o do m e todo } static void Main () { // Declarando uma instancia de uma interface IEx emploI nterf ace obj = new ImplementacaoClasse () ; // chame o m e todo . obj . ExemploMetodo () ; } }

Note que, para se sobrescrever um m etodo da interface utilizamos <Interface>.<Metodo>. C odigo 40, Linha 8. A declara c ao de uma inst ancia de uma interface e feita de forma diferente da declara c ao de um objeto normal, aqui temos: Interface <var> = new <ClasseQueImplementaAInterface>(); C odigo 40, Linha 15.

8.11

M etodos Virtuais

Quando queremos possibilitar a algum m etodo que ele seja sobrescrito, utilizamos o operador virtual. Os m etodos virtuais podem possuir corpo. Caso um m etodo n ao seja declarado como virtual ou abstract n ao ser a poss vel a sua sobrescrita.

8.12

Classes e M etodos sealed - Finais

Uma classe selada e utilizada para restringir caracter sticas da heran ca do objeto, quando uma classe e denida como sealed , est a classe n ao poder a ser herdada, caso voc e tente o compilador criara um erro em tempo de compila c ao, ap os criar uma classe selada pode se observar que o intelisense (famoso ctrl + espa co) n ao mostra o nome da classe denida como sealed quando voc e tenta criar uma heran ca para novas classes.

Apostila C#

39

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

40

Os m etodos declarados como sealed tamb em n ao poder ao ser sobrescritos.

C odigo 41: Exemplo de implementa c ao de uma classe sealed em C#


1 2 3 4 5 6 7 8 9 10 11 12

sealed class ClasseSelada { public int x ; public int y ; } class MainClass { static void Main () {

ClasseSelada sc = new ClasseSelada () ; sc . x = 110; sc . y = 150; Console . WriteLine ( " x } }


= {0} , y = {1} "

, sc .x , sc . y ) ;

8.13

Ent ao, quando devo utilizar o que?

Classes Abstratas podem adicionar mais funcionalidades, sem destruir as funcionalidades das classes lhos que poderiam estar usando uma vers ao mais antiga. Elas fornecem uma maneira simples e f acil para versionar nossos componentes. Atrav es da atualiza c ao da classe base, todas as classes que herdam s ao atualizadas automaticamente com a mudan ca. Em uma interface, a cria c ao de fun c oes adicionais ter a um efeito sobre suas classes lhos, devido ` a necessidade de implementa c ao dos M etodos criados na interface. Classes abstratas deveriam ser usadas principalmente para objetos que est ao estritamente relacionados, enquanto o uso de interfaces e mais adequado para fornecer funcionalidade comum a classes independentes. Digamos que existem duas classes, de passaros e de avi oes, e nas duas existam os m etodos chamados voar(). Seria estranho para uma classe avi oes herdar a partir de umas classe passaros apenas porque necessita do m etodo voar(). Em vez disso, o m etodo voar() deve ser denido em uma interface e em ambas as classes passaros e avi oes devem implementar a interface. Se queremos proporcionar uma funcionalidade em comum para os componentes, devemos utilizar uma classe abstrata. Classes abstratas nos permite implementar parcialmente uma classe, enquanto a interface n ao contem a implementa c ao de qualquer membro. Por isso, a sele c ao de interface ou classes abstratas depende das necessidades e design do nosso projeto. Podemos fazer uma classe

Apostila C#

40

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

41

abstrata, interface, ou at e uma combina c ao de ambas dependendo de nossas necessidades. Se desejarmos criar uma classe ou m etodo interno para um componente ou library o ideal e utilizar o tipo sealed porque qualquer tentativa de anular algumas das suas funcionalidades n ao ser a permitida. N os podemos marcar uma classe ou m etodo como selados por motivos comerciais, a m de impedir um terceiro de modicar nossa classe. Por exemplo, no .NET a string e uma classe selada. N ao devemos usar a palavra-chave sealed com um m etodo a menos que o m etodo seja uma mudan ca de outro m etodo, ou se estamos denindo um novo m etodo e n ao queremos que ningu em mais sobreponha-o, n ao se deve declar a-lo como virtual em primeiro lugar. A palavrachave selado fornece uma maneira de garantir que ao sobrepor um m etodo seja fornecido um nalsignica que ningu em mais poder a sobrepor-lo novamente.

TRATAMENTO DE ERROS E EXCEC OES


No mundo dos frameworks e linguagens de programa c ao, as excess oes, a c oes que causam

an omalias nas aplica c oes s ao tratadas de diversas formas. O .NET Framework elege, pelo poder e pela exibilidade, o tratamento de excess oes estruturadas. Desta forma o C# tamb em utiliza-se deste modelo estruturado, uniforme e type-safe. Quando uma excess ao ocorre, um objeto herdado de System.Exception, e criado para represent a-la. O modelo orientado ` a objetos permite que seja criada uma excess ao denida pelo usu ario que e herdada de System.Exception ou de uma outra classe de excess ao pr e-denida. As excess oes pr e-denas mais comuns s ao apresentadas na Tabela 9. As excess oes podem ser disparadas de duas formas: atrav es do comando throw, fornecendo a inst ancia de uma classe herdada de System.Exception, ou em certas circunst ancias durante o processamento dos comandos e express oes que n ao podem ser completadas normalmente. Os comando em C# para utiliza c ao do tratamento de excess oes estruturados s ao: try - bloco de prote c ao do c odigo, catch - ltra e trata a excess ao, nally - sempre executado ap os o disparo da excess ao ou n ao, e throw - dispara uma excess ao.

9.1

Comando throw

O comando throw e utilizado para disparar ou sinalizar a ocorr encia de uma situa c ao inesperada durante a execu c ao do programa, ou seja uma excess ao. O par ametro seguido deve ser da classe System.Exception ou derivada.

Apostila C#

41

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

42

Tabela 4: Classes de excess oes mais comuns em C# Excess ao System.OutOfMemoryException System.StackOverowException Descri c ao (disparado quando) aloca c ao de mem oria, atrav es de new, falha. quando a pilha(stack) est a cheia e sobrecarregada. System.NullReferenceException uma refer encia nula(null) e utilizada indevidamente. System.TypeInitializationException System.InvalidCastException um construtor est atico dispara uma excess ao. uma convers ao expl cita falha em tempo de execu c ao. System.ArrayTypeMismatchException System.IndexOutOfRangeException o armazenamento dentro de um array falha. o ndice do array e menor que zero ou fora do limite. System.MulticastNotSupportedException System.ArithmeticException a combina c ao de dois delegates n ao nulo falham. DivideByZeroException e OverowException. Base aritm etica. System.DivideByZeroException System.OverowException ocorre uma divis ao por zero. ocorre um overow numa opera c ao aritm etica. Checked.

C odigo 42: Exemplo de utiliza c ao do comando throw


1 2 3 4 5 6 7 8 9 10 11 12 13

using System ; class Throws { public static void Main ( string [] args ) { // Verifica se somente uma string foi entrada if ( args . Length ==1) System . Console . WriteLine ( args [0]) ; else { A r g u m e n t O u t O f R a n g e E x c e p t i o n ex ; ex = new A r g u m e n t O u t O f R a n g e E x c e p t i o n ( " throw ( ex ) ; // Dispara a excess~ ao } } }
Utilize uma string s o m e n t e " );

Apostila C#

42

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

43

9.2

Bloco try - catch

Uma ou mais instru c oes catch s ao colocadas logo abaixo do bloco try para interceptar uma excess ao. Dentro do bloco catch e encontrado o c odigo de tratamento da excess ao. O tratamento da excess ao trabalha de forma hier arquica, ou seja quando uma excess ao e disparada, cada catch e vericado de acordo com a excess ao e se a excess ao ou derivada dela e encontrada o bloco ser a executado e os outros desprezados, por isso, na implementa c ao e muito importante a sequ encia dos blocos catch. O catch tamb em pode ser encontrado na sua forma isolada, tratando qualquer excess ao n ao detalhada.

C odigo 43: Exemplo de utiliza c ao do bloco try - catch


1 2 3 4 5

using System ; class Catchs { public static void Main () { int iMax =0; Console . Write ( "
Entre um inteiro para valor m aximo , entre 0 e o m aximo ser a

s o r t e a d o : " ); 6 7 8 9 10 11 12 13 14 15 16 17 18 19

try { iMax = Console . ReadLine () . ToInt32 () ; Random r = new Random () ; int iRand = r . Next (1 , iMax ) ; Console . Write ( " O } catch ( ArgumentE xception ) { Console . WriteLine ( " 0 } catch ( Exception e ) { Console . WriteLine ( e ) ; } } }
n~ ao e um valor v a l i d o " ); valor

// Inst^ a ncia a classe Random // Sorteia rand^ o mincamente entre 0 e m a ximo


entre 1 e {1} e {0} "

sorteado

, iRand , iMax ) ;

9.3

Bloco try - nally

A instru c ao nally garante a execu c ao de seu bloco, independente da excess ao ocorrer no bloco try. Tradicionalmente o bloco nally e utilizado para libera c ao de recursos consumidos, por exemplo fechar um arquivo ou uma conex ao. Apostila C# 43

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

44

C odigo 44: Exemplo de utiliza c ao do bloco try - nally


1 2 3 4 5 6 7 8 9 10 11 12

using System ; class TryFinally { public static void Main () { try { throw new Exception ( " A } finally { Console . WriteLine ( " O } Console . WriteLine ( " } }
Esta linha n~ ao ser a e x e c u t a d a . . . " ); bloco finally e sempre e x e c u t a d o . . . " ); excess~ a o . . . " );

// Dispara a excess~ ao

Se n ao tratada, o comportamento de qualquer excess ao e de termina c ao, como podemos concluir no exemplo acima. Lembrando que, o tratamento de uma excess ao, ou sua intercepta c ao, e feita no bloco catch.

9.4

Bloco try - catch - nally

Os comandos try, catch e nally podem ser utilizados em conjunto, como pode ser visto no proximo exemplo:

C odigo 45: Exemplo de utiliza c ao do bloco try - catch - nally


1 2 3 4 5 6 7 8 9 10 11 12 13

using System ; using System . Xml ; class TryCatchFinally { public static void Main () { XmlDocument doc = null ; try { doc = new XmlDocument () ; doc . LoadXml ( "
< Exception > The E x c e p t i o n < / E x c e p t i o n > " );

// Carrega o conte u do

throw new Exception ( doc . InnerText ) ; // Dispara a excess~ ao } catch ( O ut Of Me mo ry Ex ce pt io n ) { // Tratamento aqui }

Apostila C#

44

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

45

14 15 16 17 18 19 20 21 22 23 24 25 26 27

catch ( N u l l R e f e r e n c e E x c e p t i o n ) { // Tratamento aqui } catch ( Exception e ) { // Tratamento aqui Console . WriteLine ( " } finally { Console . WriteLine ( @ " doc . Save ( @ " c } Console . WriteLine ( " } }
Esta linha n~ ao ser a e x e c u t a d a . . . " ); Gravando o Documento no C : \ . . . " ); Excess~ ao ocorrida no programa {0} "

, e);

// Uso do verbatim ( @ )

: \ e x c e p t i o n . x m l " );

// Grava o conte u do

9.5

A classe Exception

A forma mais comum e generalizada de disparo de uma excess ao e atrav es da classe base Exception. Ela fornece as informa c oes necess arias para tratamento das excess oes, possuindo alguns membros, m etodos e propriedades, que trazem as informa c oes necess arias decorrentes do erro. Normalmente uma inst ancia de classe, ou derivada, e utilizada atrav es de um bloco catch, como vimos nos exemplos anteriores. Vamos descrever alguns membros da classe Exception : Message : retorna uma string com o texto da mensagem de erro. Source : possui ou dene a uma string com o texto da origem(aplica c ao ou objeto) do erro. HelpLink : possui uma string com o link(URN ou URL) para arquivo de ajuda. StackTrace : possui uma string com a sequ encia de chamadas na stack. InnerException : retorna uma refer erencia para uma excess ao interna. TargetSite : retorna o m etodo que disparou esta excess ao. GetBaseException : retorna uma refer erencia para uma excess ao interna. SetHelpLink : dene o link(URN ou URL) para arquivo de ajuda.

Apostila C#

45

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

46

C odigo 46: Membros da classe Exception


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

catch ( System . Exception e ) { System . Console . WriteLine ( e . Message ) ; }

catch ( System . Exception e ) { System . Console . WriteLine ( e . Source ) ; }

catch ( System . Exception e ) { System . Console . WriteLine ( e . HelpLink ) ; }

catch ( System . Exception e ) { System . Console . WriteLine ( e . StackTrace ) ; }

throw e . InnerException ;

System . Reflection . MethodBase mb = e . TargetSite ; if ( mb . IsStatic ) Console . Write ( "


Membro que disparou a excess~ ao e s t a t i c " );

throw e . GetBaseException () ;

e . SetHelpLink ( "

h t t p : / / w w w . m i c r o s o f t . c o m / b r a s i l / m s d n " );

10

DE ARQUIVOS MANIPULAC AO
Com a manipula c ao de arquivos, podemos criar, editar e excluir arquivos ou diret orios. Para que possamos trabalhar com as classes referente a manipula c ao de arquivos devemos

utilizar o pacote: System.IO (IO Input /Output signica Entrada/Sa da). As principais classes que est ao nesse pacote:

10.1

Classes DirectoryInfo e FileInfo

poss E vel recuperar algumas informa c oes de arquivos e diret orios, como data de cria c ao, extens ao, entre outros. Para isso utiliza-se em C# as classes DirectoryInfo e FileInfo. Utiliza-se DirectoryInfo quando se deseja informa c oes sobre um diret orio, e FileInfo para

Apostila C#

46

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

47

Tabela 5: Principais classes do System.IO Classe Directory, File, DirectoryInfo, e FileInfo Uso Cria, exclui e move arquivos e diret orios. Ainda retorna informa c oes espec cas sobre arquivos ou diret orios FileStream Usado para escrever/ler informa c oes em arquivo com ajuda das classes StreamReader e StreamWriter StreamWriter e StreamReader StringReader e StringWriter L e e escreve um informa c ao textual L e e escreve um informa c ao textual a partir de um buer de string

informa c oes de um arquivo. A seguir est ao listadas algumas propriedades e m etodos que essas classes oferecem: Tabela 6: Propriedades e m etodos de DirectoryInfo e FileInfo Propriedade/M etodo Attributes CreationTime Exists Extension LastAccessTime FullName LastWriteTime Uso Retorna os atributos associados aos arquivos Retorna a hora de cria c ao do arquivo Checa se o arquivo/diret orio existe Retorna a extens ao do arquivo Retorna a hora do u ltimo acesso Retorna o nome completo do arquivo/diret orio Retorna a hora da ultima escrita no arquivo/diret orio Name Delete() Retorna o nome do arquivo/diret orio Exclui o arquivo/diret orio

10.1.1

Criando diret orios e subdiret orios

Para criar um diret orio utiliza-se a seguinte nota c ao:

C odigo 47: Cria c ao de diret orio

Apostila C#

47

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

48

DirectoryInfo dir1 = new DirectoryInfo ( @ " F

: \ W I N N T " );

Para criar um subdiret orio:

C odigo 48: Cria c ao de subdiret orios


1 2 3 4 5 6 7 8

DirectoryInfo dir = new DirectoryInfo ( @ " F try { dir . Cr ea teSu bdir ecto ry ( "
S u b " ); S u b \ M y S u b " );

: \ W I N N T " );

dir . Cr ea teSu bdir ecto ry ( @ " } catch ( IOException e ) {

Console . WriteLine ( e . Message ) ; }

10.1.2

Acessando as propriedades

Para acessar as propriedades de um diret orio utiliza-se a seguinte nota c ao:

C odigo 49: Propriedades de um diret orio


1 2

Console . WriteLine ( " Console . WriteLine ( "

Full

Name

is

{0} " :

, dir1 . FullName ) ; , dir1 . Attributes . ToString () ) ;

Attributes

are

{0} "

Abaixo um exemplo de acesso ` as propriedades de arquivos:

C odigo 50: Propriedades de arquivos


1 2 3 4 5 6 7 8 9 10 11

DirectoryInfo dir = new DirectoryInfo ( @ " F FileInfo [] bmpfiles = dir . GetFiles ( " Console . WriteLine ( "
Total number of

: \ W I N N T " );

* . b m p " ); files "

bmp

, bmpfiles . Length ) ;

Foreach ( FileInfo f in bmpfiles ) { Console . WriteLine ( " Console . WriteLine ( " Console . WriteLine ( " Console . WriteLine ( "
Name is : of {0} " the time of

, f . Name ) ;
file is the : is : {0} "

Length

, f . Length ) ;

Creation

{0} " file

, f . CreationTime ) ;
are : {0} "

Attributes

f . Attributes . ToString () ) ; }

Apostila C#

48

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

49

10.2

Criando arquivos usando a classe FileInfo

Com a classe FileInfo, e poss vel criar novos arquivos, acessar suas informa c oes, exclui-los e move-los. Essa classe tamb em oferece m etodos para abrir, ler e escrever um arquivo. O seguinte exemplo mostra como e poss vel criar um arquivo texto e acessar suas informa c oes.

C odigo 51: Criando arquivos com a classe FileInfo


1 2 3 4 5 6 7 8 9 10

FileInfo fi = new FileInfo ( @ " F FileStream fstr = fi . Create () ; Console . WriteLine ( " Console . WriteLine ( " Console . WriteLine ( "
Creation Full

: \ M y p r o g r a m . t x t " );

Time : {0} "

{0} "

, fi . CreationTime ) ;

Name :

, fi . FullName ) ;
{0} "

FileAttributes :

, fi . Attributes . ToString () ) ;

// Way to delete Myprogram . txt file . Console . WriteLine ( " Console . Read () ; fstr . Close () ; fi . Delete () ;
Press any key to delete the f i l e " );

10.2.1

Entendendo o m etodo Open()

Com o m etodo Open(), dispon vel na classe FileInfo, e poss vel abrir um arquivo. Deve-se passar no construtor, o modo de abertura e acesso ao arquivo. O seguinte exemplo ilustra essa situa c ao:

C odigo 52: Abrindo arquivos com a classe FileInfo


1 2

FileInfo f = new FileInfo ( " c

: \ m y f i l e . t x t " );

FileStream s = f . Open ( FileMode . OpenorWrite , FileAccess . Read ) ;

10.2.2

Entendendo a classe FileStream

Ao abrir ou criar nossos arquivos, o atribu mos para a classe FileStream. Ela pode escrever ou ler arquivos, com a ajuda das classes StreamWriter e StreamReader. O exemplo a seguir ilustra como isso e poss vel:

C odigo 53: Escrevendo/Lendo com FileStream

Apostila C#

49

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

50

FileStream fs = new FileStream ( @ " c Write ) ;

:\ mcb . txt "

, FileMode . OpenOrCreate , FileAccess .

2 3 4 5 6 7

StreamWriter sw = new StreamWriter ( fs ) ; sw . write ( "


t e s t e " ); t e s t e " );

sw . writeLine ( " sw . Close () ;

FileStream fs = new FileStream ( @ " c Write ) ;

:\ mcb . txt "

, FileMode . OpenOrCreate , FileAccess .

8 9 10 11

StreamReader sr = new StreamReader ( fs ) ; string texto ; texto = sr . ReadToEnd () ; sr . Close () ;

10.2.3

M etodos CreateText() e OpenText()

O m etodo CreateText() retorna um StreamWriter que vai escrever um arquivo. O m etodo OpenText() retorna um StreamReader que vai ler um arquivo. Esses m etodos s ao utilizados quando trabalha-se com arquivos de texto puro. Exemplos de utiliza c ao dos m etodos:

C odigo 54: CreateText e OpenText


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

FileInfo fi = new FileInfo ( " c StreamReader txtR ; txtR = fi . OpenText () ; string read = null ;

: \ m y f i l e . t x t " );

while (( read = txtR . ReadLine () ) != null ) { Console . WriteLine ( read ) ; } s . Close () ; // M e todo ReadToEnd () ; Console . WriteLine ( txtR . ReadToEnd () ) ;

FileInfo fi = new FileInfo ( " c StreamWriter txtW ; txtW = fi . CreateText () ; txtW . Write ( "
t e s t e " );

: \ m y f i l e . t x t " );

txtW . Close () ;

Apostila C#

50

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

51

11

APROFUNDANDO EM WINDOWS FORMS


Um programa dicilmente e desenvolvido com apenas um formul ario (Form ). Sempre temos

v arios deles nos nossos programas, vamos estudar neste capitulo como trabalhar com varios formul arios. Al em disso, vamos estudar as propriedades mais importantes dos formul arios. Basicamente podemos ter os seguintes tipos de interface Windows: MDI (Multiple Document Interface ): Aplica c ao que suporta m ultiplos documentos abertos simultaneamente, como o Word por exemplo. SDI (Single Document Interface ): Aplica c ao que permite a abertura de apenas um documento de cada vez. Exemplo: O Paint do Windows, a calculadora, o Internet Explorer. Janelas modais. Exemplo: As janelas informativas conhecidas como di alogos.

11.1

Aplica c oes MDI

As aplica c oes MDI t em como objetivo criar v arias inst ancias (lhos) dentro de uma aplica c ao principal (pai). Por esse motivo temos que seguir alguns passos para congurar esse ambiente. Para denir uma janela como principal (janela pai) altera-se a propriedade isMdiContainer = true ainda em tempo de compila c ao. 11.1.1 Adicionando uma nova janela lha

Para adicionar uma nova janela lha, devemos inserir um novo formul ario ao projeto: menu File/Add > New Item, selecione Windows Forms. Ao instanciarmos uma nova janela lha utilizamos a seguinte codica c ao:

C odigo 55: Janela lha (MDI)


1 2 3 4

wndFilha myWnd = new wndFilha ( ) ; myWnd . MdiParent = this ; myWnd . Text = myWnd . Show () ;
" Janela Filha ";

O que se fez aqui? Criamos uma nova inst ancia do formul ario que constitui a nossa janela lha;

Apostila C#

51

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

52

Em seguida, denimos o pai da janela lha ajustando a propriedade MdiParent do formul ario como sendo o formul ario principal. Por essa raz ao, atribu mos a essa propriedade o valor this, indicando que a janela pai e o objeto correspondente ao formul ario principal. Finalmente mostramos a janela lha chamando o m etodo Show(). 11.1.2 Fechando uma janela lha

Para fechar uma janela lha MDI ativa utiliza-se a seguinte nota c ao:

C odigo 56: Fechar janela lha (MDI)


1 2

if ( this . MdiChildren . Length != 0) this . ActiveMdiChild . Close ( ) ;

11.2

Aplica c oes SDI

Sempre que voc e cria uma Windows Application um formul ario j a e criado por padr ao, ele e conhecido como formul ario Base. Para adicionar um novo formul ario no seu programa voc e: 1. Na janela Solution Explorer, clique com o bot ao direito no nome do projeto, selecione Add e clique em Windows Form ; 2. Digite um nome para o novo formul ario e clique em Add. 11.2.1 Exemplo m ultiplos formul arios

Vamos fazer um exemplo que ilustra como podemos trabalhar com m ultiplos formul ario: 1. Crie uma Windows Application chamada Formul arios; 2. Arraste 2 buttons para o Form1; 3. Mude as propriedades Text dos Buttons 1 e 2 para Vermelho e Verde respectivamente; 4. Adicione mais dois formul arios no projeto; 5. Mude o nome do Form2 para frmVermelho e do Form3 para frmVerde. Para isso clique sobre o nome do Form no Solution Explorer e clique em Rename ;

Apostila C#

52

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

53

Se a uma mensagem de conrma c ao aparecer, clique em Sim. Isso vai atualizar todas as referencias ao form do projeto para o novo nome. 6. Mude a propriedade BackColor do frmVermelho para a cor Vermelha; 7. Mude a propriedade BackColor do frmVerde para Verde; 8. No Form1 de um clique duplo sobre o bot ao Vermelho e digite o seguinte c odigo dentro do procedimento do evento click : C odigo 57: C odigo para exibir formul ario
1 2

frmVermelho Vermelho = new frmVermelho () ; Vermelho . Show () ;

9. Fa ca o mesmo para o bot ao Verde mas digite o seguinte c odigo: C odigo 58: C odigo para exibir formul ario com show dialog
1 2

frmVerde Verde = new frmVerde () ; Verde . ShowDialog () ;

10. Execute a aplica c ao. Note que para a chamada de um formul ario e necess ario que o mesmo seja instanciado. Com o formul ario Vermelho aberto, perceba que voc e pode clicar novamente no Form1 e depois voltar para o Vermelho e assim por diante, o que n ao acontece com o formul ario Verde. Isso porque usamos o m etodo ShowDialog ao inv es do m etodo Show.

11.3

Passando valores entre Forms

Continuando com o exemplo anterior, vamos alterar um componente de um formul ario, em outro: 1. Adicione 1 button e 1 label no formul ario frmVermelho; 2. V a para o painel de c odigo do frmVermelho e dentro da classe frmVermelho digite o seguinte c odigo: C odigo 59: Vari avel p ublica do tipo string
1

public string mensagem ;

Apostila C#

53

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

54

Isso cria uma vari avel publica do tipo string chamada Mensagem. 3. V a para o Form1 e de um clique duplo sobre o bot ao Vermelho. 4. Adicione o seguinte c odigo: C odigo 60: Modicando o valor da string
1

Vermelho . mensagem =

" Formulario

Form1 ";

5. Volte para o frmVermelho, de um clique duplo sobre o button1 e digite o seguinte c odigo no procedimento: C odigo 61: Modicando o valor da label para um string local
1

label1 . Text = mensagem ;

Isso adiciona o conte udo da vari avel mensagem no Label1. 6. Execute a aplica c ao. O conte udo da vari avel foi exibida no label1. O mais importante desta li c ao e que voc e agora e capaz de passar valores entre formul arios.

11.4

Posicionando os formul arios na tela

Por quest oes de est etica, temos a possibilidade de alterar algumas propriedades dos componentes para que eles se tornem mais apresent aveis. O posicionamento de formul ario na tela ilustra uma dessas possibilidades. Vamos estudar algumas modica c oes na propriedade StartPosition. CenterScreen : Essa propriedade faz com que o formul ario em quest ao seja exibido no centro da tela; Manual : Deve-se especicar manualmente como os valores que ser ao usados para posicionar o formul ario na tela. A propriedade location faz o posicionamento x, y do formul ario na tela. Se alterarmos a propriedade para (100, 50), o formul ario ser a exibido a 100 pixels da lateral esquerda e 50 pixels do topo da tela. A propriedade WindowsState altera o estado inicial do meu formul ario principal: Apostila C# 54

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

55

Normal : Abre o formul ario em seu estado inicial; Minimized : Abre o formul ario minimizado na barra de tarefas; Maximized : Abre o formul ario maximizado.

11.5

Controlando os eventos dos formul arios

Os eventos s ao a c oes atribu das ao comportamento do formul ario. Sempre que um evento ocorre um bloco de c odigo pode ser processado, esse bloco de c odigo e conhecido como Manipulador de Evento. O .NET Framework usa uma nomea c ao padr ao para os Manipuladores de Eventos. Essa nomea c ao combina o nome do objeto com o evento correspondente ligando-os por um underline, exemplo: button1 Click; form1 Load.

Apostila C#

55

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

56

12
12.1

COM BANCO DE DADOS CONEXAO


O que e o ADO.NET ?

O ADO.NET e uma nova tecnologia baseada no ADO (Active Data Objects ), com muito mais recursos. O ADO.NET possui um modelo para manipula c ao de dados completamente diferente da vers ao anterior do ADO, simplicando o processo de conex ao e manipula c ao de dados. A arquitetura do ADO.NET foi criada para trabalhar com um ambiente desconectado, ou seja, buscamos as informa c oes do banco de dados e trazemos para a mem oria da aplica c ao. A manipula c ao dos dados e feita toda em mem oria e posteriormente enviada ao banco de dados. Por trabalhar de uma forma voltada ao modelo desconectado, o ADO.NET possui uma poss camada de persist encia em XML. E vel gravar e ler todo o conte udo de todo um conjunto de armazenado nas estruturas do ADO.NET em XML. O ADO.NET faz parte do .NET Framework, e e composto por um conjunto de classes, interfaces, tipos e enumera c oes.

12.2

Os namespaces relacionados ao ADO.NET

Para trabalharmos com o ADO.NET em uma aplica c ao .NET, e necess ario utilizarmos algumas das namespaces dispon veis nas bibliotecas do .NET Framework. Alguns dos principais namespace s ao: System.Data : Cont em a infra-estrutura b asica para trabalharmos com qualquer base de dados relacional. Neste namespace encontramos as classes respons aveis por armazenar as estruturas dos bancos relacionais em mem oria; System.Data.Common : Cont em as interfaces comuns a todos os bancos de dados. Este namespace e utilizado internamente pelo framework e por fabricantes de bancos de dados, para a constru c ao de bibliotecas de acesso; System.Data.SqlClient : Biblioteca de acesso ao SQL Server. Permite a conex ao, a extra c ao e a execu c ao de comandos em servidores SQL Server de vers ao 7 ou superior; System.Data.OleDb : Biblioteca de acesso para bancos de dados que suportam OleDb. Per necess mite conex ao, a extra c ao e a execu c ao de comandos nestes bancos de dados. E ario informar o provedor OleDb a ser utilizado. Permite acesso a bancos mais simples, como o Access;

Apostila C#

56

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

57

System.Data.SqlTypes : Cont em a deni c ao dos tipos nativos do SQL Server; System.XML: Cont em as classes para manipula c ao de documentos XML. Como o ADO.NET possui uma camada de persist encia em XML, este namespace e amplamente utilizado.

12.3

O modelo de execu c ao do ADO.NET

O ADO.NET prov e uma estrutura de acesso a dados que permite o acesso a m ultiplas bases poss de dados simultaneamente. E vel armazenar duas tabelas de diferentes bancos de dados (SQL Server e Access por exemplo) em uma mesma estrutura de dados (DataSet). A estrutura respons avel pelo armazenamento dos dados e o DataSet, que cont em um conjunto de objetos (DataTables ) que representam resultados tabulares extra dos da base de dados.

Figura 1: Esquema acesso ao banco de dados

Para fazer a extra c ao dos dados, o ADO.NET utiliza os chamados .NET Data Providers. Os Data Providers s ao bibliotecas de classes especializadas para o acesso a um tipo de banco de dados relacional. Por serem uma implementa c ao espec ca para o banco de dados, estas possuem um acesso bem mais eciente do que outras bibliotecas como a OleDb. Segue uma lista de data providers dispon veis para os bancos citados: Firebird .NET Data Provider; MySQL .NET Data Provider; Npgsql .NET Data Provider; Apesar de serem uma implementa c ao espec ca para um tipo de banco de dados, as classes dos Data Providers possuem uma estrutura comum.

Apostila C#

57

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

58

12.4

O modelo de execu c ao em um ambiente conectado

O ADO.NET e capaz de trabalhar com dois modelos, o modelo conectado e o modelo desconectado. No modelo conectado e necess ario manter a conex ao aberta enquanto s ao realizadas as opera c oes de leitura e grava c ao. Para trabalharmos em um modelo conectado, devemos observar alguns objetos dispon veis nas classes dos .NET Data Providers, que devem ser utilizados na seguinte ordem: o objeto utilizado para estabelecer a conex necess XxxConnection : E ao com o banco. E ario informar os par ametros de conex ao e abrir a conex ao com o banco. Exemplos dessa classe s ao SqlConnection e OleDbConnection ; um objeto utilizado para enviar comandos a base de dados. E necess XxxCommand : E ario montar a cl ausula Sql desejada e informar ao objeto de comando. Ao executar o comando, este pode devolver um objeto do tipo XxxDataReader ; um objeto utilizado para ler dados de um comando executado. O XxxDataReader : E m etodo Read l e os dados de registro em registro. Ap os a leitura completa dos dados e necess ario fechar o DataReader e a conex ao;

12.5

O modelo de execu c ao em um ambiente desconectado

O modelo de execu c ao em um ambiente desconectado utiliza outros objetos. Neste modelo utilizamos o objeto DataSet para armazenar e manipular os dados em mem oria e o objeto XxxDataAdapter para extrair e enviar as altera c oes ao banco de dados. O objeto de conex ao tamb em e utilizado neste modelo. Os passos para extra c ao e manipula c ao dos dados em um ambiente desconectado s ao: aberta uma conex 1. E ao utilizando um objeto XxxConnection (OleDbConnection ou SqlConnection por exemplo); criado um objeto do tipo XxxDataAdapter que 2. E e respons avel por fazer a extra c ao de dados do banco de dados para a mem oria e o posterior envio dos dados da mem oria para o banco de dados; 3. Utilizando o m etodo Fill, extra mos os dados da base de dados e armazenamos em um DataSet. Neste momento fechamos a conex ao com o banco pois os dados j a est ao na mem oria da aplica c ao para serem manipulados; Apostila C# 58

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

59

4. Como os dados est ao em mem oria, e poss vel inserir, remover ou alterar registros do DataSet ; 5. Ao nalizar as altera c oes, restabelecemos a conex ao com o banco de dados para enviar as altera c oes; 6. Utilizando o m etodo Update do DataAdapter, enviamos as altera c oes para o banco de dados. O DataAdapter verica os tipos de altera c oes que foram realizadas e executa o comando correspondente no banco de dados (inser c ao, exclus ao, atualiza c ao); 7. Ao nalizar o processo, fechamos a conex ao com o banco de dados.

12.6

Estabelecendo uma conex ao com um banco de dados

O primeiro passo para criarmos uma aplica c ao com conex ao a um banco de dados e estabelecer a conex ao com o banco. Para estabelecermos a conex ao, devemos criar um objeto de conex ao. Ao criarmos uma inst ancia da classe que ir a se conectar, devemos informar uma string de conex ao, que cont em todos os par ametros para a conex ao com o banco de dados, como usu ario e senha. A string de conex ao possui uma s erie de par ametros, que pode variar de acordo com o banco de dados utilizado. Os par ametros da string de conex ao s ao separados por ponto e v rgula, e devem ser informados com a seguinte nota c ao:

C odigo 62: Padr ao para Connection Strings


1 " Nome do Par^ ametro = Valor do Par^ ametro "

Abaixo est a uma classe com string de conex ao para os bancos MySQL, Firebird e PostGreSQL respectivamente:

C odigo 63: Padr ao para Connection Strings


1 2 3

class Global { public static string cnmysql =


localhost ; user id = root ; " database password = = dados ; data source =

password ";

Apostila C#

59

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

60

public static string cnfirebird =


Database = WIN1252 ; =0; = C :\\ dados . fdb ; Role =;

" User = SYSDBA ; =

Password

masterkey ; Charset

DataSource

localhost ;

Dialect =3;

Connection Packet

lifetime =15; Size =4096;

Pooling = true ;

MinPoolSize

MaxPoolSize =50;

S e r v e r T y p e =0 ";

6 7

public static string cnpostgree =

" User

ID = p o s t g r e s ; P a s s w o r d = p a s s w o r d ; Pool Size

Host = localhost ; Port =5432; Database = dados ; Pooling = true ; Min =0; Max 8 Pool Size =100; Connection L i f e t i m e =0 ";

12.7

Criando comandos

poss E vel executar comando no banco de dados atrav es da classe SqlCommand. Ao criar um objeto dessa classe, devemos informar o comando Sql a ser executado, bem como a conex ao a ser utilizada. Estes par ametros podem ser informados tanto no construtor da classe SqlCommand como tamb em atrav es das propriedades CommandText e Connection. Os comandos SQL informados em um objeto de comando podem ser de qualquer tipo: que retornam um conjunto de linha, que retornam um valor espec co, ou que n ao retornam nenhuma quer. Cada um destes tipos de comando SQL possui um m etodo para execu c ao. Atrav es da classe SqlCommand tamb em e poss vel executar Stored Procedures do banco de dados, sendo necess ario apenas informar o nome da stored procedure no par ametro CommandText, e setar a propriedade CommandType da classe para CommandTypes.StoredProcedure. Um exemplo de cria c ao de um objeto de comando pode ser observado a seguir.

C odigo 64: Exemplo de utiliza c ao do comando SqlCommand


1 2 3

SqlCommand oCmd = New SqlCommand ( " oCmd . Connection = oConn ; oCmd . CommandText =
" UPDATE

UPDATE

Products

SET

U n i t P r i c e = U n i t P r i c e * 1 . 1 " );

Products

SET

U n i t P r i c e = U n i t P r i c e *1.05 ";

12.8

Executando comandos

Para executarmos os comandos especicados na classe SqlCommand, precisamos executar um dos m etodos de execu c ao dispon veis. Os m etodos de execu c ao variam de acordo com a natureza do comando executado. Os tr es m etodos mais comuns s ao: ExecuteNonQuery : Para comandos que n ao executam consultas (querys); Apostila C# 60

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

61

ExecuteScalar : Para comandos que executam resultados escalares; ExecuteReader : Para comandos que retornam conjuntos de dados. 12.8.1 O m etodo ExecuteNonQuery

O m etodo ExecuteNonQuery e utilizado quando queremos executar um comando que n ao retorna como resultado um conjunto de dados. Este m etodo e utilizado para comandos de atualiza c ao e inser c ao e tamb em para comando DCL (Data Control Language ) suportados pelo banco de dados. Opcionalmente podemos informar um par ametro para este m etodo para obter o n umero de linhas afetadas pelo comando executado. Um exemplo de utiliza c ao do comando ExecuteNonQuery pode ser observado a seguir.

C odigo 65: Exemplo de utiliza c ao do comando ExecuteNonQuery


1 2 3 4

SqlCommand oCmd = new SqlCommand ( " oCmd . Connection = oConn ; oCmd . CommandText =
" UPDATE

UPDATE

Products

SET

U n i t P r i c e = U n i t P r i c e * 1 . 1 " );

Products

SET

U n i t P r i c e = U n i t P r i c e *1.05 ";

oCmd . ExecuteNonQuery () ;

12.8.2

O m etodo ExecuteScalar

O m etodo ExecuteScalar e utilizado para comandos que retornam valores escalares, ou seja, valores u nicos. Em geral e utilizado para comandos que retornam uma contagem de registros ou que executam ao comando de agrega c ao no banco de dados. Este comando pode retornar qualquer tipo de dado. Um exemplo de utiliza c ao do comando ExecuteScalar pode ser observado a seguir.

C odigo 66: Exemplo de utiliza c ao do comando ExecuteScalar


1 2 3 4 5

SqlCommand oCmd = new SqlCommand ( " oCmd . Connection = oConn ; oCmd . CommandText = int iNumProdutos ;
" SELECT

UPDATE

Products

SET

U n i t P r i c e = U n i t P r i c e * 1 . 1 " );

COUNT (*)

FROM

Products ";

iNumProdutos = oCmd . ExecuteScalar () ;

Apostila C#

61

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

62

12.8.3

O m etodo ExecuteReader

O m etodo ExecuteReader e utilizado para executar querys que retornam um conjunto de dados. Este m etodo tem como resultado um objeto do tipo SqlDataReader. A classe SqlDataReader representa um cursor aberto no banco de dados com os dados retornados pela query informada no objeto de comando. Para lermos os dados de um DataReader, e necess ario executamos o m etodo Read. Este m etodo retorna verdadeiro caso um registro tenha sido lido do cursor do banco de dados, e falso necess quando n ao houver mais registros a serem lidos. E ario chamar o m etodo Read pelo menos uma vez, pois o cursor aberto n ao ca posicionado no primeiro registro. Como o DataReader mant em um cursor aberto com o banco de dados, n ao e poss vel realizar nenhuma opera c ao no banco de dados (utilizando a conex ao utilizada pelo DataReader ) enquanto o DataReader estiver aberto. Por tanto, e necess ario fechar o DataReader imediatamente ap os a sua utiliza c ao. Um exemplo de utiliza c ao do m etodo ExecuteReader e da classe DataReader pode ser observado a seguir.

C odigo 67: Exemplo de utiliza c ao do comando ExecuteReader


1

SqlCommand oCmd = new SqlCommand ( " oConn ) ;

SELECT

ProductName ,

ProductId

FROM

Products "

2 3 4 5 6

SqlDataReader oDr ; oDr = oCmd . ExecuteReader () ; while ( oDr . Read () ) { Debug . WriteLine ( oDr ( " }
P r o d u c t N a m e " ) . ToString () ) ;

12.9

Passando par ametros

poss E vel passar par ametros para os objetos da classe SqlCommand. Para indicarmos par ametros nas querys informadas neste objeto, utilizamos o s mbolo @ como prexo para indicar um par ametro. Esta sintaxe pode variar de acordo com o banco de dados utilizado (o Oracle utiliza :por exemplo). Depois de indicar os par ametros na query, e preciso adicionar objetos do tipo SqlParameter na cole c ao de par ametros do SqlCommand. A cole c ao de par ametros pode ser acessada atrav es da propriedade Parameters do objeto de comando. Apostila C# 62

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

63

Um exemplo de cria c ao de par ametros pode ser observado a seguir.

C odigo 68: Exemplo de utiliza c ao de par ametros


1 2 3 4

SqlConnection oConn = new SqlConnection ( sConnString ) ; SqlCommand oCmd = new SqlCommand () ; oCmd . Connection = oConn ; oCmd . CommandText =
" UPDATE Products "

"

SET

UnitPrice = @UnitPrice

"

"

WHERE

P r o d u c t I d = @ P r o d u c t I d "; 5 6 7 8 9 10 11 12

SqlParameter oParam = new SqlParameter ( " oCmd . Parameters . Add ( oParam ) ; oParam = new SqlParameter () ; oParam . ParameterName =
" @ P r o d u c t I d ";

@UnitPrice "

, 1.5) ;

oParam . DbType = DbType . Int32 ; oParam . Value = 1; oCmd . Parameters . Add ( oParam ) ; oCmd . ExecuteNonQuery () ;

12.10

O que e um DataSet ?

O DataSet e uma classe capaz de armazenar m ultiplos resultados tabulares em uma mesma estrutura. O DataSet e composto por estruturas chamadas DataTables que representam estes resultados tabulares. Para extrairmos dados da base de dados e preenchermos o DataSet utilizamos a classe DataAdapter. Esta classe e capaz de executar os quatro comandos b asicos de um banco de dados (Insert, Update, Delete, Select ) sendo capaz de executar estas opera c oes sobre os dados do DataSet.

12.11

O que e um DataAdapter ?

O DataAdapter e a classe respons avel por fazer a intera c ao entre a base de dados e o DataSet. Ela possui quatro propriedades que representam os quatro comandos principais que utilizamos para interagir com o banco de dados. Para realizar a extra c ao de dados do banco de dados para o DataSet, o DataAdapter usa o comando de select, contido na propriedade SelectCommand. Ap os extrairmos os dados para o DataSet, podemos modicar estes dados (que est ao arma` medida que modicamos os dados do DataSet, este faz uma marca zenados em mem oria). A c ao

Apostila C#

63

Apostila C#
Diogo Cezar Teixera Batista 20 de novembro de 2008

64

nas altera c oes que fazemos, marcando as linhas inseridas como inseridas, modicadas como modicados e exclu dos como exclu dos. Quando conclu mos as altera c oes, e poss vel chamar o DataAdapter novamente para que ele execute para cada linha modicada o comando correspondente a modica c ao realizada.

12.12

Criando um DataSet e um DataAdapter

Quando criamos um DataAdapter e poss vel informar uma query e uma conex ao para a extra c ao dos dados. O SqlCommand referente ` a propriedade SelectCommand e criado automaticamente. Os outros comandos devem ser criados manualmente. Um exemplo de cria c ao de um objeto DataAdapter pode ser observado a seguir.

C odigo 69: Criando um DataSet e um DataAdapter


1 2 3 4

SqlDataAdapter daProduct = new SqlDataAdapter ( " SqlDataAdapter daOrders = new SqlDataAdapter () ; SqlCommand oCmd = new SqlCommand ( "
SELECT * FROM

SELECT

FROM

Products "

, oConn ) ;

Orders "

, oConn ) ;

daOrders . SelectCommand = new SqlCommand ( oCmd ) ;

12.13

Criando e preenchendo um DataSet

Para criar um novo DataSet basta utilizar o comando New e criar um novo objeto. Para preencher um dataset utilizando um DataAdapter, devemos utilizar o m etodo Fill do DataAdapter, informando o DataSet e nome da tabela a ser criada no DataSet. Um exemplo de cria c ao de um DataSet e utiliza c ao de um DataAdapter podem ser observados a seguir.

C odigo 70: Criando e preenchendo um DataSet


1 2 3

SqlDataAdapter daProduct = new SqlDataAdapter ( " DataSet ds = new DataSet () ; daProduct . Fill ( ds ,
" P r o d u c t s " );

SELECT

FROM

Products "

, oConn ) ;

Apostila C#

64