Anda di halaman 1dari 64

Apostila C#

Conceitos Bsicos a

Universidade Tecnolgica Federal do Paran o a

Diogo Cezar Teixera Batista

Cornlio Procpio e o

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

Sumrio a
1 INTRODUCAO 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 Referncia . . . . . . . . . . . . . . . . . . . . . . . . e Converso de Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a O Objeto Convert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

6 COMANDOS 6.1 Seleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 6.1.1 6.1.2 6.2 Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Iterao ou Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 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 Aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e Operadores de Incremento e Decremento . . . . . . . . . . . . . . . . . . . . . . . Operadores Lgico, Relacional e Condicional . . . . . . . . . . . . . . . . . . . . o Operao de Atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca ca

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

8 PROGRAMACAO BASEADA EM OBJETOS 8.1 Convenes e Padres de Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . co o 8.1.1 8.1.2 8.2 8.3 8.4 8.5 Nomeao de variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca a Nomeao de classes, mtodos, propriedades, entre outros. . . . . . . . . . ca e

Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modicadores de visibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 8.5.1 This e Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.6 8.7 8.8 8.9

Declarao e Chamada de Mtodos e Objetos . . . . . . . . . . . . . . . . . . . . ca e Mtodos e Atributos Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e Const e ReadOnly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes e Mtodos Abstratos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e

8.10 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.11 Mtodos Virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 8.12 Classes e Mtodos sealed - Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . e 8.13 Ento, quando devo utilizar o que? . . . . . . . . . . . . . . . . . . . . . . . . . . a 9 TRATAMENTO DE ERROS E EXCECOES 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 MANIPULACAO DE ARQUIVOS 10.1 Classes DirectoryInfo e FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.1 Criando diretrios e subdiretrios . . . . . . . . . . . . . . . . . . . . . . . o o

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 mtodo Open() . . . . . . . . . . . . . . . . . . . . . . . . . e 10.2.2 Entendendo a classe FileStream . . . . . . . . . . . . . . . . . . . . . . . . 10.2.3 Mtodos CreateText() e OpenText() . . . . . . . . . . . . . . . . . . . . . e 11 APROFUNDANDO EM WINDOWS FORMS 11.1 Aplicaes MDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 11.1.1 Adicionando uma nova janela lha . . . . . . . . . . . . . . . . . . . . . . 11.1.2 Fechando uma janela lha . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Aplicaes SDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 11.2.1 Exemplo mltiplos formulrios . . . . . . . . . . . . . . . . . . . . . . . . u a 11.3 Passando valores entre Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Posicionando os formulrios na tela . . . . . . . . . . . . . . . . . . . . . . . . . . a 11.5 Controlando os eventos dos formulrios . . . . . . . . . . . . . . . . . . . . . . . . a 12 CONEXAO COM BANCO DE DADOS 12.1 O que o ADO.NET ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 12.2 Os namespaces relacionados ao ADO.NET . . . . . . . . . . . . . . . . . . . . . . 12.3 O modelo de execuo do ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . ca 12.4 O modelo de execuo em um ambiente conectado . . . . . . . . . . . . . . . . . ca 12.5 O modelo de execuo em um ambiente desconectado ca . . . . . . . . . . . . . . .

12.6 Estabelecendo uma conexo com um banco de dados . . . . . . . . . . . . . . . . a 12.7 Criando comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8 Executando comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.1 O mtodo ExecuteNonQuery . . . . . . . . . . . . . . . . . . . . . . . . . e 12.8.2 O mtodo ExecuteScalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 12.8.3 O mtodo ExecuteReader . . . . . . . . . . . . . . . . . . . . . . . . . . . e 12.9 Passando parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 12.10O que um DataSet? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 12.11O que um DataAdapter ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 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 converso automtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . a a Operadores do C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes de excesses mais comuns em C# . . . . . . . . . . . . . . . . . . . . . . o Principais classes do System.IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades e mtodos de DirectoryInfo e FileInfo . . . . . . . . . . . . . . . . . e 14 16 27 42 47 47

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

Lista de Cdigos o
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 converso automtica de tipos . . . . . . . . . . . . . . . . . . . . . . a a Exemplo de utilizao do objeto Convert . . . . . . . . . . . . . . . . . . . . . . ca Sintaxe para a declarao de Arrays . . . . . . . . . . . . . . . . . . . . . . . . . ca Sintaxe para a declarao de Arrays com duas ou mais dimenses . . . . . . . . . ca o Sintaxe para a declarao de uma matriz de Arrays com duas ou mais dimenses ca o Sintaxe para a inicializao de Arrays com duas ou mais dimenses . . . . . . . . ca o Passando Arrays ` mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a e 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 Ternrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Iterao for ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Iterao for (exemplo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Iterao foreach (exemplo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Iterao do while (exemplo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Operadores Unrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Operadores Binrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Exemplo Operadores Binrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Operadores de Incremento e Decremento . . . . . . . . . . . . . . . . . . . . . . . Exemplo do operador de negao . . . . . . . . . . . . . . . . . . . . . . . . . . . ca Exemplo do operador de atribuio . . . . . . . . . . . . . . . . . . . . . . . . . . ca Exemplo do operador de atribuio composta . . . . . . . . . . . . . . . . . . . . ca Exemplo de codicao sem qualquer padro de nomenclatura . . . . . . . . . . . ca a Exemplo de codicao com padro de nomenclatura . . . . . . . . . . . . . . . . ca a 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 utilizao dos modicadores de visibilidade C# . . . . . . . . . . . . ca Exemplo de declarao de herana em C# . . . . . . . . . . . . . . . . . . . . . . ca c Exemplo de this e base em C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo instanciao de objeto em C# . . . . . . . . . . . . . . . . . . . . . . . ca Exemplo acesso a atributos e mtodos em C# . . . . . . . . . . . . . . . . . . . . e Exemplo acesso a atributos e mtodos estticos em C# . . . . . . . . . . . . . . e a Exemplo de implementao de uma classe abstrata em C# . . . . . . . . . . . . ca Exemplo de implementao de uma interface em C# . . . . . . . . . . . . . . . . ca Exemplo de implementao de uma classe sealed em C# . . . . . . . . . . . . . . ca Exemplo de utilizao do comando throw . . . . . . . . . . . . . . . . . . . . . . ca Exemplo de utilizao do bloco try - catch . . . . . . . . . . . . . . . . . . . . . . ca Exemplo de utilizao do bloco try - nally . . . . . . . . . . . . . . . . . . . . . ca Exemplo de utilizao do bloco try - catch - nally . . . . . . . . . . . . . . . . . ca Membros da classe Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criao de diretrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca o Criao de subdiretrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca o Propriedades de um diretrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 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) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cdigo para exibir formulrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o a Cdigo para exibir formulrio com show dialog . . . . . . . . . . . . . . . . . . . o a Varivel pblica do tipo string . . . . . . . . . . . . . . . . . . . . . . . . . . . . a u Modicando o valor da string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modicando o valor da label para um string local . . . . . . . . . . . . . . . . . . Padro para Connection Strings a Padro para Connection Strings a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Exemplo de utilizao do comando SqlCommand . . . . . . . . . . . . . . . . . . ca

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

65 66 67 68 69 70

Exemplo de utilizao do comando ExecuteNonQuery ca

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

61 61 62 63 64 64

Exemplo de utilizao do comando ExecuteScalar . . . . . . . . . . . . . . . . . . ca Exemplo de utilizao do comando ExecuteReader . . . . . . . . . . . . . . . . . ca Exemplo de utilizao de parmetros . . . . . . . . . . . . . . . . . . . . . . . . . ca a Criando um DataSet e um DataAdapter . . . . . . . . . . . . . . . . . . . . . . . Criando e preenchendo um DataSet . . . . . . . . . . . . . . . . . . . . . . . . .

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

INTRODUCAO
Entende-se por uma plataforma de desenvolvimento, um conjunto de instrues ordenadas co

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

1.1

Plataforma .NET

.NET a nova plataforma de desenvolvimento da Microsoft que tem como foco principal o e desenvolvimento de Servios WEB XML. Um servio Web XML, ou simplesmente Web Service c c transcende ao que ns conhecemos como pginas dinmicas, as quais podem ser acessadas a o a a partir de um browser. A idia central de um Web Service consiste em permitir que as aplicaes, e co sejam elas da Web ou Desktop, se comuniquem e troquem dados de forma simples e transparente, independente do sistema operacional ou da linguagem de programao. ca 1.1.1 Abordagem .NET

Independncia de linguagem de programao: o que permite a implementao do mee ca ca canismo de herana, controle de excees e depurao entre linguagens de programao c co ca ca diferentes; Reutilizao de cdigo legado: o que implica em reaproveitamento de cdigo escrito usando ca o o outras tecnologias como COM, COM+, ATL, DLLs e outras bibliotecas existentes; Tempo de execuo compartilhado: o runtime de .NET compartilhado entre as diversas ca e linguagens que a suportam, o que quer dizer que no existe um runtime diferente para a cada linguagem que implementa .NET; Sistemas auto-explicativos e controle de verses: cada pea de cdigo .NET contm em si o c o e mesma a informao necessria e suciente de forma que o runtime no precise procurar ca a a no registro do Windows mais informaes sobre o programa que est sendo executado. O co a runtime encontra essas informaes no prprio sistema em questo e sabe qual a verso a co o a a ser executada, sem acusar aqueles velhos conitos de incompatibilidade ao registrar DLLs no Windows; Simplicidade na resoluo de problemas complexos. ca

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 execuo comparca

tilhado, o ambiente de execuo das aplicaes .NET. As aplicaes .NET no so aplicaes e ca co co a a co Win32 propriamente ditas (apesar de executarem no ambiente Windows), razo pela qual o a runtime Win32 no sabe como execut-las. O Win32, ao identicar uma aplicao .NET, disa a ca para o runtime .NET que, a partir desse momento, assume o controle da aplicao no sentido ca mais amplo da palavra, porque, dentre outras coisas, ele quem vai cuidar do gerenciamento da e memria via um mecanismo de gerenciamento de memria chamado Garbage Collector (GC) ou o o coletor de lixo. Esse gerenciamento da memria torna os programas menos suscept o veis a erros. Mais ainda, o CLR como seu prprio nome o diz, compartilhado e, portanto, no temos um o e a runtime para VB.NET, outro para C# etc. E o mesmo para todo mundo. 1.1.2.2 CLS (Common Language Specication) O CLS, ou EspecicaoComumda ca

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

de componentes de software reutilizveis que no apenas facilitem, mas tambm que acelerem o a a e desenvolvimento de sistemas.

A linguagem C#
C# (pronunciada C Sharp), uma linguagem de programao da Plataforma .NET, dee ca

rivada de C/C++ orientada ` objetos. E a linguagem nativa para .NET Common Language a Runtime(CLR), mecanismo de execuo da plataforma .NET. Isso possibilita a convivncia com ca e vrias outras linguagens especif a 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 to poderosa e a quanto o C++ e to simples quanto o Visual Basic. a

Apostila C#

10

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

11

Completamente orientada a objetos: em C#, qualquer varivel tem de fazer parte de uma a classe. Fortemente tipada: isso ajudar a evitar erros por manipulao imprpria de tipos, atria ca o buies incorretas etc. co Gera cdigo gerenciado: assim como o ambiente .NET gerenciado, assim tambm a o e e e linguagem C#. Tudo um objeto: System.Object a classe base de todo o sistema de tipos de C#. e e Controle de verses: cada assembly gerado, seja como EXE ou DLL, tem informao o ca sobre a verso do cdigo, permitindo a coexistncia de dois assemblies homnimos, mas a o e o de verses diferentes no mesmo ambiente. o Suporte a cdigo legado: o C# pode interagir com cdigo legado de objetos COM e DLLs o o escritas em uma linguagem no-gerenciada. a Flexibilidade: se o desenvolvedor precisar usar ponteiros, o C# permite, mas ao custo de desenvolver cdigo no-gerenciado, chamado unsafe. o a Linguagem gerenciada: os programas desenvolvidos em C# executam num ambiente gerenciado, o que signica que todo o gerenciamento de memria feito pelo runtime via o e o GC (Garbage Collector ), e no diretamente pelo programador, reduzindo as chances de a cometer erros comuns a linguagens de programao onde o gerenciamento da memria ca o 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#:

Cdigo 1: Hello World em C# o


1 2 3 4 5 6

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

A clusula using referencia a as classes a serem utilizadas, System atua como namespace a das classes. O namespace System contm muitas classes, uma delas a Console. O mtodo e e e WriteLine, simplesmente emite a string no console.

3.1

Main

O mtodo Main o ponto de entrada de execuo do seu programa. A classe que ser e e ca a executada inicialmente possui embutida a funo esttica Main. Uma ou mais classes podem ca a conter a funo Main, entretanto, apenas uma ser o ponto de entrada, indicada na compilao ca a ca pelo parmetro /main:<tipo>, ou simplicando /m:<tipo>. a O mtodo Main, pode ser declarado de 4 formas: e 1. Retornando um vazio(void): public static void Main(); 2. Retornando um inteiro(int): public static int Main(); 3. Recebendo argumentos, atravs de um array de string e retornando um vazio: e static void Main(string[] args); 4. Recebendo argumentos, atravs de um array de string e retornando um inteiro: public e 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

Cdigo 2: Estrutura de um programa em C# o


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: so a forma lgica de organizar o cdigo-fonte; a o o Tipos: classes, estruturas, interfaces, delegaes, enums; co Membros: constantes, campos, mtodos, propriedades, indexadores, eventos, operadores, e construtores; Outros: comntarios e instrues. e co

VARIAVEIS NA LINGUAGEM C#
Na linguagem C# as variveis esto agrupadas em algumas categorias como: a a Static: existe apenas uma unica copia desta varivel para todas as instncias de uma a a classe. Uma varivel static comea a existir quando um programa comea a executar, e a c c deixa de existir quando o programa terminar. Instance: existe uma copia para cada instncia de uma classe. Uma varivel Instance a a comea a existir quando uma instncia daquele tipo e criado, e deixa de existir quando c a no houver nenhuma referencia aquela instncia ou quando e mtodo Finalize e executado. a a e Array: uma matriz que e criada em tempo de execuo. e ca

Apostila C#

13

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

14

5.1

Tipos de dados

Como toda linguagem de programao o C# tambm apresenta seu grupo de tipos de dados ca e bsico. Esses tipos so conhecidos como tipos primitivos ou fundamentais por serem suportados a a diretamente pelo compilador, e sero utilizados durante a codicao na denio de variveis, a ca ca a parmetros, declaraes e at mesmo em comparaes. a co e co A Tabela 1 apresenta os tipos bsicos da linguagem C# relacionados juntamente com os a 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 Descrio ca 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 Referncia e

Os tipos de dados no C# so divididos em 3 categorias: a Tipos valor(value types); Tipos referncia(reference types); e Tipos ponteiro(pointer types). Tipos valor armazenam dados em memria enquanto tipos referncia armazenam uma reo e ferncia, ou o endereo, para o valor atual. e c Quando utilizamos uma varivel do tipo referncia no estaremos acessando seu valor direa e a tamente, mas sim um endereo referente ao seu valor, ao contrrio do tipo valor que permite o c a acesso diretamente a seu contedo. u Os tipos ponteiro, apenas apontam para um endereo de memria. c o 5.1.2 Converso de Tipos a

Converter um tipo de dado em nmero ou em literal comum em situaes de programao. u e co ca Devemos considerar alguns aspectos para a converso de nmeros: a u Como existem diversos tipos de nmeros, inteiros, ponto utuante ou decimal, os valores u so convertidos sempre para o tipo de maior faixa de valores. Por exemplo, o tipo long a e convertido para o ponto utuante, mais importante ressaltar que o contrario causa um e erro. Os tipos de menor faixa so convertidos para os de maior faixa. Por exemplo, o tipo int a pode ser convertido para: long, oat, double ou decimal. A converso dos tipos de ponto utuante(oat, double) para decimal causa erro. a A converso entre os tipos com sinal e sem sinal de valores inteiros com o mesmo tamanho a causa erro. Por exemplo, entre o tipo int e unit. Por exemplo:

Cdigo 3: Exemplo de converso automtica de tipos o a a


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 converso automtica a a 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 usado para converter um tipo de dado em outro. e Os tipos de dados suportados so: Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, a UInt32, UInt64, Single, Double, Decimal, DateTime e String. Por exemplo:

Cdigo 4: Exemplo de utilizao do objeto Convert o ca


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 uma matriz de valores do mesmo tipo, que criada em tempo de execuo, e e ca podendo ser acessada por meio de um ndice. A declarao do array sempre faz o uso de um colchete( [ ] ) depois do tipo da varivel. O ca a uso da instruo new sempre deve ser utilizado, pois obrigatrio. ca e o O tipo array pode ter diversas dimenses, o tamanho desta denido pelo desenvolvedor, o e mas devemos saber que o primeiro ndice sempre zero. e No tipo array devemos sempre inicializar seus elementos, pois obrigatrio tambm. Veja e o e abaixo a forma de sintaxe para a declarao de arrays. ca

Cdigo 5: Sintaxe para a declarao de Arrays o ca


1 2 3 4

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

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

Cdigo 6: Sintaxe para a declarao de Arrays com duas ou mais dimenses o ca o


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];

Cdigo 7: Sintaxe para a declarao de uma matriz de Arrays com duas ou mais dimenses o ca o
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];

Cdigo 8: Sintaxe para a inicializao de Arrays com duas ou mais dimenses o ca o


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 mtodo, especique o nome do array sem usar e colchetes e para que um mtodo receba um array, a lista de parmetros deve especicar que um e a array ser recebido. a Veja o seguinte exemplo:

Cdigo 9: Passando Arrays ` mtodos o a e


1 2 3 4

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

public void ExibeVetor ( int [] vetor ) ;

Algumas Propriedades e Mtodos dos Arrays: e obj.Length Tamanho do vetor; Array.IndexOf(Array vetor, object value) Procura a primeira ocorrncia de vae lor em vetor; Array.LastIndexOf(Array vetor, object value) Procura a ultima ocorrncia de e valor em vetor; Array.Sort(Array vetor) Ordena um vetor crescentemente; Array.Reverse(Array vetor) Ordena um vetor decrescentemente.

6
6.1

COMANDOS
Seleo ca

Os comandos de seleo so utilizados na escolha de uma possibilidade entre uma ou mais ca a 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 expresso, ou expresses, booleana para executar um comando a o ou um bloco de comandos. A clusula else opcional na utilizao do if , no entanto, seu uso a e ca comum em decises com duas ou mais opes. e o co

Cdigo 10: Exemplo do comando if em C# o


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

// if com uma nica possibilidade . Exibe a string " Verdadeiro " no Console caso a u // express~ o ( a == true ) seja verdadeira a if ( a == true ) { System . Console . Write ( " } // if com uma nica possibilidade . Exibe a string " Verdadeiro " no Console caso a u // express~ o ( a == true ) seja verdadeira , sen~ o exibe a string " Falso " a a 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 expresso do comando if deve ser embutida em parnteses (()) e possui o conceito de a e curto-circuito (short-circuit). Isto quer dizer que se uma expresso composta por And (&&), a fornecer na sua primeira anlise um valor booleano false (falso), as restantes no sero analisadas. a a a Este conceito vlido para todas expresses booleanas. e a o Por exemplo:

Cdigo 11: Ifs com And e Or o


1 2 3 4 5 6 7 8 9

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

// || ( Or ) . Ambas fun ~ es s~ o executadas co a 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 tambm pode ser encontrado na forma aninhada. e

Cdigo 12: Ifs aninhados o


1 2 3 4 5 6 7

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


O K " );

Porm, devido a caracter e stica de curto-circuito nas expresses, as linhas de cima podem e o devem ser reescritas para:

Cdigo 13: Curto-circuito o


1

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

O K " );

O comando if tambm pode ser encontrado num formato escada if-else-if , quando e existem mais do que duas possibilidades. Porm, na maioria destes casos, se as expresses no e o a forem compostas ou utilizarem de funes, a clusula switch substitui este tipo de construo. co a ca

Cdigo 14: Exemplo if-else-if o


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 rio pede reentrada a 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 clusula else unica pode ser encontrado em sua forma reduzida com a operador ternrio representado por interrogao (?:). E chamado de operador ternrio por posa ca a suir 3 expresses: a primeira refere-se a condio boolena, a segunda se a condio verdadeira o ca ca e e a terceira se a condio falsa. ca e

Cdigo 15: Operador Ternrio o a


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 expresso contra uma lista de valores a constantes para execuo de um ou mais comandos. Os valor constante tratado atravs da ca e e clusula case e este pode ser nmerico, caracter ou string. A clusula default utilizada para a u a e Apostila C# 21

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

22

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

Cdigo 16: Comando switch o


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 rio pede reentrada a 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 clusulas case podem ser encontradas seguidamente quando mais do que uma a opo permitida para um comando ou bloco de comandos. O exemplo abaixo apresenta essa ca e

Apostila C#

22

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

23

condio: ca

Cdigo 17: Comando switch o


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 clusula break , utilizada para separar os blocos do switch e garante que o bloco seja a e executado somente at determinado ponto. e

6.2

Iterao ou Loop ca

Conhecidos como lao ou loop, os comandos de iterao executam repetidamente um coc ca mando ou bloco de comandos, a partir de uma determinada condio. Esta condio pode ser ca ca pr-denida ou com nal em aberto. Em C#, fazem parte dos comandos de iterao: while , e ca do , for e foreach . 6.2.1 Comando for

O comando for possui 3 declaraes opcionais, separadas por ponto e v co rgula (;), dentro dos parnteses: inicializao, condio e a iterao. Em cada parmetro, mais de uma expresso e ca ca ca a a pode ser encontrada separada por v rgula.

Cdigo 18: Iterao for o ca


1 2 3 4 5 6

for ( int x =0; x < 100; ++ x ) { System . Console . WriteLine ( x ) ; } for (;;) { // La o infinito c 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 o com mais de 1 vari vel c a System . Console . WriteLine ( y ) ; }

Quando a clusula for processada pela primeira vez, se presente, a expresso ou expresses a e a o da declarao inicializadora so executadas na ordem que elas esto escritas, este passo ocorre ca a a apenas uma vez. Se a declarao condicional estiver presente, ser avaliada, caso contrrio ca a a o for assume o valor verdadeiro (true). Na avaliao, se o valor obtido for verdadeiro (true) o ca comando ou bloco de comandos associados sero executados, ao seu nal a terceira declarao ou a ca declarao de iterao processada e, ento, novamente a declarao condicional processada. ca ca e a ca e Este uxo ocorre continuamente at que a declarao condicional seja avaliada como falsa (false) e ca ou o comando break seja encontrado, como visto anteriormente. O comando continue fora uma c nova iterao. ca

Cdigo 19: Iterao for (exemplo) o ca


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^ncia e

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 rio pede reentrada a do { iVezes = Console . ReadLine () . ToInt32 () ; } while ( iVezes <1 || iVezes >100) ; // Cria o vetor din^ micamente a 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 coleo. O cdigo abaixo implementa a ca o funcionalidade do exemplo anterior:

Cdigo 20: Iterao foreach (exemplo) o ca


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^ncia e

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 rio pede reentrada a do { iVezes = Console . ReadLine () . ToInt32 () ; } while ( iVezes <1 || iVezes >100) ; // Cria o vetor din^ micamente a 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 tm caracter e 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 expresso condicional do comando do encontrada no nal do bloco. a e

Cdigo 21: Iterao do while (exemplo) o ca


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# uma linguagem muito rica em operadores. Estes representados por s e mbolos so a

utilizados na construo de expresses. A sintaxe de expresso do C# baseada na sintaxe ca o a e do C++. Os operadores so categorizados em diversas funcionalidades. A tabela 3 apresenta a essas divises. o Quando uma expresso possui mltiplas operaes, a precedncia dos operadores levada a u co e e em considerao na avaliao da mesma. Normalmente, as expresses so avaliadas da esquerda ca ca o a para direita, exceto para operaes de atribuio e condicional, porm a precedncia pode ser co ca e e alterada atravs do uso do parnteses. e e

Apostila C#

26

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

27

Tabela 3: Operadores do C# Categoria Aritmtica e Lgica (boolena e bitwise) o Concatenao de string ca Incremento e decremento Shift Relacional Atribuio ca Acesso a membro Indexao ca Indexao ca Condicional Delegate (concatenao e remoo) ca ca Delegate (concatenao e remoo) ca ca Informao de tipo ca Controle de excesso de overow a Indireo e endereo ca c Operadores &+-*/% &|! + ++ << >> == != <> <= >= = += -= *= /= %= &= = = <<= >>= . [] () ?: +new is sizeof typeof checked unchecked * - [] & && || true false

7.1

Operadores Aritmticos e

Os operadores aritmticos so utilizados na maioria das expresses para execuo de clculos. e a o ca a Numa expresso, eles podem produzir resultados fora da faixa de valores. Neste caso, uma a excesso como OverowException gerada. a e Os operadores unrios (atribu a dos a 1 atributo) + e - so utilizados para representar se o a nmero positivo ou negativo, respectivamente. u e

Cdigo 22: Operadores Unrios o a


1 2

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

Os operadores binrios +, -, *, / e % so utilizados nas expresses para execuo de clculos a a o ca a tais como soma, subtrao, multiplicao, diviso e sobra. O operador binrio + quando utilica ca a a zado entre strings representam concatenao. No entanto, quando existem strings e nmeros na ca u Apostila C# 27

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

28

expresso e nenhuma operao de cast for executada a operao tratado como concatenao. a ca ca e ca O operador binrio % computado atravs da frmula dividendo - ( dividendo / divisor ) * a e e o divisor. Os exemplos abaixo ilustram essas condies: co

Cdigo 23: Operadores Binrios o a


1 2 3

string x = string x = int

" Hello " " Valor =

+
"

" World "

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

+ 100

x = 1000 % 11

O cdigo abaixo utiliza os operadores aritmticos. Note a utilizao e recebimento de aro e ca gumentos atravs da linha de comando. O entry-point Main permite ser passado um vetor de e strings como parmetro. O mtodo Length conta o nmero de parmetros passado, ignorando o a e u a executvel. Como todo vetor o primeiro parmetro representado pelo a a e ndice zero, por exemplo args[0]. A vriavel args no uma palavra-chave, portanto, esta pode ser alterada: a a e

Cdigo 24: Exemplo Operadores Binrios o a


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 mero de argumentos entrados u 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 ~ o ca try { x = args [1]. ToInt32 () ; y = args [2]. ToInt32 () ; } catch { usage () ; return ; } // Efetua a opera ~ o selecionada no primeiro argumento ca 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~o ca = {0} "

Console . Write ( " break ; case


" / ":

, x-y);

Console . Write ( " break ; case


" * ":

Valor

da

divis~o a

{0} "

, x/y);

Console . Write ( " break ; case


" % ":

Valor

da

multiplica~o ca

{0} "

, x*y);

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

Valor

da

sobra

{0} "

, x%y);

public static void usage () { // Modo de utiliza ~ o ca 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 que se o operador for utilizado ` esquerda da varivel, ou seja prexado, o valor e a a e adicionado ou subtra de um antes de sua utilizao. do ca

Cdigo 25: Operadores de Incremento e Decremento o


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 Lgico, Relacional e Condicional o

Esses operadores so utilizados em expresses onde o resultado retornado ou a caracter a o stica booleana. e O operador de negao ! retorna o complemento de um valor booleano. ca

Cdigo 26: Exemplo do operador de negao o ca


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, no igual ou diferente, menor, maior, menor ou igual e maior ou igual, respectivamente. a Por exemplo, a == b quer dizer se a for igual a b, isto totalmente vlido na expresso com e a a tipos primitivos(value types), tais como int, long, char, entre outros. Porm o comportamento e dos operadores == e != so diferenciados quando utilizado entre structs (value types) e classes a (reference types). Para structs a comparao deve levar em considerao todos os campos da ca ca estrutura. Para classes a comparao efetuada pelo endereo, ou referncia, da classe. O unico ca e c e reference type que compara o valor e no a referncia a string ou a classe System.String, pois a e e os operadores == e != so sobrecarregados. A sobrecarga pode alterar o comportamento padro a a dos operadores.

7.4

Operao de Atribuio ca ca

Estes operadores, divididos entre simples e compostos, so utilizados na designao de um a ca valor para uma varivel. O operador = representa a atribuio simples, ou seja uma varivel do a ca a lado esquerdo recebe o contudo de um valor, de uma varivel ou do resultado de uma expresso e a a do lado direito.

Cdigo 27: Exemplo do operador de atribuio o ca


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 +=, -=, *=, /=, %=, &=, =, =, = e = representam a atribuio ca composta, que normalmente atuam como um atalho na construo de uma expresso. ca a

Cdigo 28: Exemplo do operador de atribuio composta o ca


1 2

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

8
8.1

PROGRAMACAO BASEADA EM OBJETOS


Convenes e Padres de Nomenclatura co o

As convenes e padres de nomenclatura auxiliam o desenvolvedor na organizao, locaco o ca lizao e manuteno de seus cdigos. Imagine como seria encontrar a seguinte codicao: ca ca o ca

Cdigo 29: Exemplo de codicao sem qualquer padro de nomenclatura o ca a


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 diferena, se utilizarmos algumas regras de nomenclatura: c

Cdigo 30: Exemplo de codicao com padro de nomenclatura o ca a


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

} }

Aps aplicadas as regras de nomenclaturas, alm de saber o que signica cada varivel e o e a mtodo, conseguimos ler sem diculdade as palavras sem os espaos que as separam. e c Para a nomenclatura de classes, como visto no exemplo, deve-se utilizar o seguinte padro: a Primeiro caractere de cada palavra em caixa alta. Chamada de notao PascalCasing. ca Para a nomenclatura de mtodos, utiliza-se: Primeira letra de cada palavra em caixa alta, e menos da primeira. Chamada de notao camelCasing. ca 8.1.1 Nomeao de variveis ca a

Recomendao da Microsoft para nomeao de variveis: ca ca a Evite usar underline ; No crie variveis com o mesmo nome mudando somente entre maisculas e minsculas; a a u u Utilize nomes de variveis com minsculas; a u Evite utilizar todas as letras maisculas (normalmente utilizado para denir constantes); u Notao camelCasing. ca 8.1.2 Nomeao de classes, mtodos, propriedades, entre outros. ca e

Recomendaes para nomeao de classes, mtodos, propriedades, enumeradores, interfaces, co ca e constantes, campos somente leitura e namespace: Notao PascalCasting. ca

8.2

Classes

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

Cdigo 31: Exemplo de Classe em C# o


1 2 3

class NomeDaClasse { // Defini ~ o dos atributos ca 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 todo construtor e public NomeDaClasse ( int param1 , string param2 ) { } // Defini ~ o dos m todos ca e public tipoRetorno MetodoUm ([ lista de par^ metros ]) { a return [ valor ]; } }

Os atributos denem atravs de tipos de dados as caracter e 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 mtodo construtor sempre chamado quando se cria um novo objeto, ele pode ou no e e a conter uma assinatura. Os outros mtodos denem atravs de rotinas as aes que um objeto venha a apresentar, e e co No exemplo citado acima, uma classe Carro poderia conter os mtodos: acelerar, frear e ligar. e

8.3

Propriedades

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

Cdigo 32: Exemplo de Propriedades em C# o


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, mtodo ou e varivel; a 2. public: Signica que todos tm acesso livre a este membro; e 3. protected : Signica que so apenas vis a veis para as classes derivadas por meio de herana; c 4. internal : todos tm acesso livre a este membro dentro de um assembly (DLL ou EXE; e correspondente ao JAR do Java). Fora do assembly a classe inacess e vel. Atributos internal, so utilizados geralmente para a criao de bibliotecas, j que uma biblia ca a oteca pode ter vrios namespaces. a O exemplo a seguir mostra como devemos dispor os modicadores de visibilidade:

Cdigo 33: Exemplo de utilizao dos modicadores de visibilidade C# o ca


1 2 3 4 5 6 7

class NomeDaClasse { private public int atrib1 ; int atrib2 ;

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

8.5

Herana c

A herana um recurso utilizado para derivar classes que tm mtodos ou atributos em c e e e comum. Sua principal vantagem o reaproveitamento de cdigo. e o Para ilustrar a utilizao do recurso de herana, imagine a seguinte situao: ca c ca [?]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 informaes, bem como co consulta-las e imprimi-las. Se o programador optar por utilizar herana, os atributos e mtodos em comum: c e

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 declarao deve acontecer da seguinte maneira: ca

Cdigo 34: Exemplo de declarao de herana em C# o ca c


1 2 3

class NomeDaClasse : ClasseBase { ... }

8.5.1

This e Base

As clusulas this e base so referncias que indicam a propria classe e a classe base, respeca a e tivamente. Entende-se como classe base, a classe cuja a classe atual herda as propriedades e atributos. Sua notao pode ser observada no seguinte exemplo: ca

Cdigo 35: Exemplo de this e base em C# o


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

Declarao e Chamada de Mtodos e Objetos ca e

Para se instanciar um objeto deve-se utilizar a operao new. Essa operao atribui um ca ca <objeto> montado dentro de uma varivel do tipo <objeto>. a Utiliza-se a seguinte notao: ca

Cdigo 36: Exemplo instanciao de objeto em C# o ca


1

MinhaClasse obj = new MinhaClasse () ;

Para acessar seus atributos e mtodos utilizamos a instruo ., como pode ser observado e ca no exemplo a seguir:

Cdigo 37: Exemplo acesso a atributos e mtodos em C# o e


1 2 3

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


" Apenas um teste ";

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

8.7

Mtodos e Atributos Static e

A operao static dene um mtodo ou atributo como pertencentes ` classe em questo e ca e a a no aos objetos, assim sendo esses atributos ou mtodos tero apenas 1 cpia para n objetos a e a o que gerarem. Sua declarao feita com a palavra static depois do modicador de acesso (public, private) ca e e antes do tipo de dado (int, string). O seu acesso feito pelo nome da classe e no mais pela referncia da classe ou pelo nome e a e do objeto. Veja no exemplo: Apostila C# 36

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

37

Cdigo 38: Exemplo acesso a atributos e mtodos estticos em C# o e a


1 2 3

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

8.8

Const e ReadOnly

So operadores utilizados para a criao de constantes, cujos os valores no podero ser a ca a a alterados durante a execuo do programa. ca Algumas diferenas entre os operadores: c const: No pode ser esttico (static); a a O valor setado em tempo de compilao; e ca E inicializado somente na compilao. ca readonly: Pode ser esttico (static); a O valor setado em tempo de execuo; e ca Pode ser inicializado na declarao ou na codicao do construtor. ca ca

8.9

Classes e Mtodos Abstratos e

A classe abstrata um tipo de classe que somente pode ser herdada e no instanciada, de e a certa forma pode se dizer que este tipo de classe uma classe conceitual que pode denir funcie onalidades para que as suas subclasses (classes que herdam desta classe) possam implementa-las de forma no obrigatria, ou seja ao se denir um conjunto de mtodos na classe abstrata no a o e a de total obrigatoriedade a implementao de todos os mtodos em suas subclasses, em uma e ca e classe abstrata os mtodos declarados podem ser abstratos ou no, e suas implementaes dee a co vem ser obrigatrias na subclasse ou no, quando criamos um mtodo abstrato em uma classe o a e abstrata sua implementao obrigatria, caso voc no implemente o mesmo o compilador ca e o e a criar um erro em tempo de compilao. a ca O mesmo se tm com mtodos abstratos, no se pode herda-los. e e a

Apostila C#

37

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

38

Cdigo 39: Exemplo de implementao de uma classe abstrata em C# o ca


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~ o for implementado o m todo Area () a e // ser gerado um compile - time error . a // Utiliza - se o operador override para indicar a sobrescrita . public override int Area () { return x * y ; } }

8.10

Interfaces

As interfaces so fundamentais em um sistema orientado a objetos, quando dizemos que a um objeto a instancia de uma classe, na verdade queremos dizer, que este objeto implementa e a interface denida pela classe, ou seja uma interface dene as operaes que um objeto ser co a obrigado a implementar. Para cada operao declarada por um objeto deve ser especicado ca o nome da operao, os objetos que esta operao aceita como parmetro e o tipo de valor ca ca a retornado pela operao; este conjunto de informaes sobre uma determinada operao tem o ca co ca nome de assinatura da operao, e um conjunto de assinaturas de operaes d-se o nome de ca co a interface. E importante lembrar que uma interface nunca contm implementao, ou seja numa intere ca face no se pode denir campos, pois o mesmo uma implementao de um atributo objeto, a a e ca interface tambm no permite construtores pois num contrutor temos as instrues usadas para e a co inicializar campos. Para podermos usar uma interface devemos criar uma classe ou estrutura e herdar da interface, com isso obrigatrio implementar todos os mtodos da interface. e o e

Cdigo 40: Exemplo de implementao de uma interface em C# o ca


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 ~ o explicita da interface ca void IE xempl oInte rface . ExemploMetodo () { // Implementa ~ o do m todo ca e } static void Main () { // Declarando uma instancia de uma interface IEx emploI nterf ace obj = new ImplementacaoClasse () ; // chame o m todo . e obj . ExemploMetodo () ; } }

Note que, para se sobrescrever um mtodo da interface utilizamos <Interface>.<Metodo>. e Cdigo 40, Linha 8. o A declarao de uma instncia de uma interface feita de forma diferente da declarao de ca a e ca um objeto normal, aqui temos: Interface <var> = new <ClasseQueImplementaAInterface>(); Cdigo 40, Linha 15. o

8.11

Mtodos Virtuais e

Quando queremos possibilitar a algum mtodo que ele seja sobrescrito, utilizamos o operador e virtual. Os mtodos virtuais podem possuir corpo. e Caso um mtodo no seja declarado como virtual ou abstract no ser poss a sua sobrese a a a vel crita.

8.12

Classes e Mtodos sealed - Finais e

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

Apostila C#

39

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

40

Os mtodos declarados como sealed tambm no podero ser sobrescritos. e e a a

Cdigo 41: Exemplo de implementao de uma classe sealed em C# o ca


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

Ento, quando devo utilizar o que? a

Classes Abstratas podem adicionar mais funcionalidades, sem destruir as funcionalidades das classes lhos que poderiam estar usando uma verso mais antiga. Elas fornecem uma maneira a simples e fcil para versionar nossos componentes. Atravs da atualizao da classe base, todas a e ca as classes que herdam so atualizadas automaticamente com a mudana. a c Em uma interface, a criao de funes adicionais ter um efeito sobre suas classes lhos, ca co a devido ` necessidade de implementao dos Mtodos criados na interface. a ca e Classes abstratas deveriam ser usadas principalmente para objetos que esto estritamente a relacionados, enquanto o uso de interfaces mais adequado para fornecer funcionalidade comum e a classes independentes. Digamos que existem duas classes, de passaros e de avies, e nas duas o existam os mtodos chamados voar(). Seria estranho para uma classe avies herdar a partir de e o umas classe passaros apenas porque necessita do mtodo voar(). Em vez disso, o mtodo voar() e e deve ser denido em uma interface e em ambas as classes passaros e avies devem implementar o 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 no contem a implementao de qualquer membro. Por isso, a seleo de interface ou clasa ca ca ses 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 uma combinao de ambas dependendo de nossas necessidades. Se e ca desejarmos criar uma classe ou mtodo interno para um componente ou library o ideal utilizar e e o tipo sealed porque qualquer tentativa de anular algumas das suas funcionalidades no ser a a permitida. Ns podemos marcar uma classe ou mtodo como selados por motivos comerciais, a m de o e impedir um terceiro de modicar nossa classe. Por exemplo, no .NET a string uma classe e selada. No devemos usar a palavra-chave sealed com um mtodo a menos que o mtodo seja a e e uma mudana de outro mtodo, ou se estamos denindo um novo mtodo e no queremos que c e e a ningum mais sobreponha-o, no se deve declar-lo como virtual em primeiro lugar. A palavrae a a chave selado fornece uma maneira de garantir que ao sobrepor um mtodo seja fornecido um e nalsignica que ningum mais poder sobrepor-lo novamente. e a

TRATAMENTO DE ERROS E EXCECOES


No mundo dos frameworks e linguagens de programao, as excesses, aes que causam ca o co

anmalias nas aplicaes so tratadas de diversas formas. O .NET Framework elege, pelo poder o co a e pela exibilidade, o tratamento de excesses estruturadas. Desta forma o C# tambm utiliza-se o e deste modelo estruturado, uniforme e type-safe. Quando uma excesso ocorre, um objeto herdado de System.Exception, criado para rea e present-la. O modelo orientado ` objetos permite que seja criada uma excesso denida pelo a a a usurio que herdada de System.Exception ou de uma outra classe de excesso pr-denida. As a e a e excesses pr-denas mais comuns so apresentadas na Tabela 9. o e a As excesses podem ser disparadas de duas formas: atravs do comando throw, fornecendo o e a instncia de uma classe herdada de System.Exception, ou em certas circunstncias durante o a a processamento dos comandos e expresses que no podem ser completadas normalmente. o a Os comando em C# para utilizao do tratamento de excesses estruturados so: try - bloco ca o a de proteo do cdigo, catch - ltra e trata a excesso, nally - sempre executado aps o disparo ca o a o da excesso ou no, e throw - dispara uma excesso. a a a

9.1

Comando throw

O comando throw utilizado para disparar ou sinalizar a ocorrncia de uma situao inese e ca perada durante a execuo do programa, ou seja uma excesso. O parmetro seguido deve ser ca a a 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 excesses mais comuns em C# o Excesso a System.OutOfMemoryException System.StackOverowException Descrio (disparado quando) ca alocao de memria, atravs de new, falha. ca o e quando a pilha(stack) est cheia e sobrecarrea gada. System.NullReferenceException uma referncia nula(null) utilizada indevidae e mente. System.TypeInitializationException System.InvalidCastException um construtor esttico dispara uma excesso. a a uma converso expl a cita falha em tempo de execuo. ca System.ArrayTypeMismatchException System.IndexOutOfRangeException o armazenamento dentro de um array falha. o ndice do array menor que zero ou fora do e limite. System.MulticastNotSupportedException System.ArithmeticException a combinao de dois delegates no nulo falham. ca a DivideByZeroException e OverowException. Base aritmtica. e System.DivideByZeroException System.OverowException ocorre uma diviso por zero. a ocorre um overow numa operao aritmtica. ca e Checked.

Cdigo 42: Exemplo de utilizao do comando throw o ca


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~ o a } } }
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 instrues catch so colocadas logo abaixo do bloco try para interceptar uma co a excesso. Dentro do bloco catch encontrado o cdigo de tratamento da excesso. O tratamento a e o a da excesso trabalha de forma hierrquica, ou seja quando uma excesso disparada, cada catch a a a e vericado de acordo com a excesso e se a excesso ou derivada dela encontrada o bloco ser e a a e a executado e os outros desprezados, por isso, na implementao muito importante a sequncia ca e e dos blocos catch. O catch tambm pode ser encontrado na sua forma isolada, tratando qualquer e excesso no detalhada. a a

Cdigo 43: Exemplo de utilizao do bloco try - catch o ca


1 2 3 4 5

using System ; class Catchs { public static void Main () { int iMax =0; Console . Write ( "
Entre um inteiro para valor mximo , a entre 0 e o mximo a 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~o a e um valor v l i d o " ); a valor

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


entre 1 e {1} e {0} "

sorteado

, iRand , iMax ) ;

9.3

Bloco try - nally

A instruo nally garante a execuo de seu bloco, independente da excesso ocorrer no ca ca a bloco try. Tradicionalmente o bloco nally utilizado para liberao de recursos consumidos, por exeme ca plo fechar um arquivo ou uma conexo. a Apostila C# 43

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

44

Cdigo 44: Exemplo de utilizao do bloco try - nally o ca


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~o a ser a e x e c u t a d a . . . " ); bloco finally e sempre e x e c u t a d o . . . " ); e x c e s s ~ o . . . " ); a

// Dispara a excess~ o a

Se no tratada, o comportamento de qualquer excesso de terminao, como podemos a a e ca concluir no exemplo acima. Lembrando que, o tratamento de uma excesso, ou sua interceptao, a ca feita no bloco catch. e

9.4

Bloco try - catch - nally

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

Cdigo 45: Exemplo de utilizao do bloco try - catch - nally o ca


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 do u

throw new Exception ( doc . InnerText ) ; // Dispara a excess~ o a } 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~o a ser a e x e c u t a d a . . . " ); Gravando o Documento no C : \ . . . " ); Excess~o a ocorrida no programa {0} "

, e);

// Uso do verbatim ( @ )

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

// Grava o conte do u

9.5

A classe Exception

A forma mais comum e generalizada de disparo de uma excesso atravs da classe base a e e Exception. Ela fornece as informaes necessrias para tratamento das excesses, possuindo co a o alguns membros, mtodos e propriedades, que trazem as informaes necessrias decorrentes do e co a erro. Normalmente uma instncia de classe, ou derivada, utilizada atravs de um bloco catch, a e e 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(aplicao ou objeto) do erro. ca HelpLink : possui uma string com o link(URN ou URL) para arquivo de ajuda. StackTrace: possui uma string com a sequncia de chamadas na stack. e InnerException: retorna uma referrencia para uma excesso interna. e a TargetSite: retorna o mtodo que disparou esta excesso. e a GetBaseException: retorna uma referrencia para uma excesso interna. e a 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

Cdigo 46: Membros da classe Exception o


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~o a 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

MANIPULACAO DE ARQUIVOS
Com a manipulao de arquivos, podemos criar, editar e excluir arquivos ou diretrios. ca o Para que possamos trabalhar com as classes referente a manipulao de arquivos devemos ca

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

10.1

Classes DirectoryInfo e FileInfo

E poss vel recuperar algumas informaes de arquivos e diretrios, como data de criao, co o ca extenso, entre outros. Para isso utiliza-se em C# as classes DirectoryInfo e FileInfo. a Utiliza-se DirectoryInfo quando se deseja informaes sobre um diretrio, e FileInfo para co o

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 diretrios. Ainda o retorna informaes espec co cas sobre arquivos ou diretrios o FileStream Usado para escrever/ler informaes em arquivo co com ajuda das classes StreamReader e StreamWriter StreamWriter e StreamReader StringReader e StringWriter L e escreve um informao textual e ca L e escreve um informao textual a partir de e ca um buer de string

informaes de um arquivo. co A seguir esto listadas algumas propriedades e mtodos que essas classes oferecem: a e Tabela 6: Propriedades e mtodos de DirectoryInfo e FileInfo e Propriedade/Mtodo e Attributes CreationTime Exists Extension LastAccessTime FullName LastWriteTime Uso Retorna os atributos associados aos arquivos Retorna a hora de criao do arquivo ca Checa se o arquivo/diretrio existe o Retorna a extenso do arquivo a Retorna a hora do ultimo acesso Retorna o nome completo do arquivo/diretrio o Retorna a hora da ultima escrita no arquivo/diretrio o Name Delete() Retorna o nome do arquivo/diretrio o Exclui o arquivo/diretrio o

10.1.1

Criando diretrios e subdiretrios o o

Para criar um diretrio utiliza-se a seguinte notao: o ca

Cdigo 47: Criao de diretrio o ca o

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 subdiretrio: o

Cdigo 48: Criao de subdiretrios o ca o


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 diretrio utiliza-se a seguinte notao: o ca

Cdigo 49: Propriedades de um diretrio o o


1 2

Console . WriteLine ( " Console . WriteLine ( "

Full

Name

is

{0} " :

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

Attributes

are

{0} "

Abaixo um exemplo de acesso `s propriedades de arquivos: a

Cdigo 50: Propriedades de arquivos o


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, poss criar novos arquivos, acessar suas informaes, exclui-los e e vel co move-los. Essa classe tambm oferece mtodos para abrir, ler e escrever um arquivo. e e O seguinte exemplo mostra como poss criar um arquivo texto e acessar suas informaes. e vel co

Cdigo 51: Criando arquivos com a classe FileInfo o


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 mtodo Open() e

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

Cdigo 52: Abrindo arquivos com a classe FileInfo o


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 poss e vel:

Cdigo 53: Escrevendo/Lendo com FileStream o

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

Mtodos CreateText() e OpenText() e

O mtodo CreateText() retorna um StreamWriter que vai escrever um arquivo. O mtodo e e OpenText() retorna um StreamReader que vai ler um arquivo. Esses mtodos so utilizados quando trabalha-se com arquivos de texto puro. e a Exemplos de utilizao dos mtodos: ca e

Cdigo 54: CreateText e OpenText o


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 todo ReadToEnd () ; e 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 desenvolvido com apenas um formulrio (Form). Sempre temos e a

vrios deles nos nossos programas, vamos estudar neste capitulo como trabalhar com varios a formulrios. Alm disso, vamos estudar as propriedades mais importantes dos formulrios. a e a Basicamente podemos ter os seguintes tipos de interface Windows: MDI (Multiple Document Interface): Aplicao que suporta mltiplos documentos abertos ca u simultaneamente, como o Word por exemplo. SDI (Single Document Interface): Aplicao que permite a abertura de apenas um docuca mento de cada vez. Exemplo: O Paint do Windows, a calculadora, o Internet Explorer. Janelas modais. Exemplo: As janelas informativas conhecidas como dilogos. a

11.1

Aplicaes MDI co

As aplicaes MDI tm como objetivo criar vrias instncias (lhos) dentro de uma aplicao co e a a ca 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 compilao. ca 11.1.1 Adicionando uma nova janela lha

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

Cdigo 55: Janela lha (MDI) o


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 instncia do formulrio que constitui a nossa janela lha; a a

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 formulrio como sendo o formulrio principal. Por essa razo, atribu a a a mos a essa propriedade o valor this, indicando que a janela pai o objeto correspondente ao formulrio principal. e a Finalmente mostramos a janela lha chamando o mtodo Show(). e 11.1.2 Fechando uma janela lha

Para fechar uma janela lha MDI ativa utiliza-se a seguinte notao: ca

Cdigo 56: Fechar janela lha (MDI) o


1 2

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

11.2

Aplicaes SDI co

Sempre que voc cria uma Windows Application um formulrio j criado por padro, ele e a ae a conhecido como formulrio Base. e a Para adicionar um novo formulrio no seu programa voc: a e 1. Na janela Solution Explorer, clique com o boto direito no nome do projeto, selecione Add a e clique em Windows Form; 2. Digite um nome para o novo formulrio e clique em Add. a 11.2.1 Exemplo m ltiplos formulrios u a

Vamos fazer um exemplo que ilustra como podemos trabalhar com mltiplos formulrio: u a 1. Crie uma Windows Application chamada Formulrios; a 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 formulrios no projeto; a 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 conrmao aparecer, clique em Sim. Isso vai atualizar todas ca 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 boto Vermelho e digite o seguinte cdigo dentro a o do procedimento do evento click : Cdigo 57: Cdigo para exibir formulrio o o a
1 2

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

9. Faa o mesmo para o boto Verde mas digite o seguinte cdigo: c a o Cdigo 58: Cdigo para exibir formulrio com show dialog o o a
1 2

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

10. Execute a aplicao. ca Note que para a chamada de um formulrio necessrio que o mesmo seja instanciado. a e a Com o formulrio Vermelho aberto, perceba que voc pode clicar novamente no Form1 e a e depois voltar para o Vermelho e assim por diante, o que no acontece com o formulrio Verde. a a Isso porque usamos o mtodo ShowDialog ao invs do mtodo Show. e e e

11.3

Passando valores entre Forms

Continuando com o exemplo anterior, vamos alterar um componente de um formulrio, em a outro: 1. Adicione 1 button e 1 label no formulrio frmVermelho; a 2. V para o painel de cdigo do frmVermelho e dentro da classe frmVermelho digite o seguinte a o cdigo: o Cdigo 59: Varivel pblica do tipo string o a u
1

public string mensagem ;

Apostila C#

53

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

54

Isso cria uma varivel publica do tipo string chamada Mensagem. a 3. V para o Form1 e de um clique duplo sobre o boto Vermelho. a a 4. Adicione o seguinte cdigo: o Cdigo 60: Modicando o valor da string o
1

Vermelho . mensagem =

" Formulario

Form1 ";

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

label1 . Text = mensagem ;

Isso adiciona o contedo da varivel mensagem no Label1. u a 6. Execute a aplicao. ca O contedo da varivel foi exibida no label1. O mais importante desta lio que voc agora u a ca e e capaz de passar valores entre formulrios. e a

11.4

Posicionando os formulrios na tela a

Por questes de esttica, temos a possibilidade de alterar algumas propriedades dos como e ponentes para que eles se tornem mais apresentveis. O posicionamento de formulrio na tela a a ilustra uma dessas possibilidades. Vamos estudar algumas modicaes na propriedade StartPosition. co CenterScreen: Essa propriedade faz com que o formulrio em questo seja exibido no a a centro da tela; Manual : Deve-se especicar manualmente como os valores que sero usados para posicioa nar o formulrio na tela. a A propriedade location faz o posicionamento x, y do formulrio na tela. Se alterarmos a a propriedade para (100, 50), o formulrio ser exibido a 100 pixels da lateral esquerda a a e 50 pixels do topo da tela. A propriedade WindowsState altera o estado inicial do meu formulrio principal: a Apostila C# 54

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

55

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

11.5

Controlando os eventos dos formulrios a

Os eventos so aes atribu a co das ao comportamento do formulrio. Sempre que um evento a ocorre um bloco de cdigo pode ser processado, esse bloco de cdigo conhecido como Manipuo o e lador de Evento. O .NET Framework usa uma nomeao padro para os Manipuladores de Eventos. Essa ca a nomeao combina o nome do objeto com o evento correspondente ligando-os por um underline, ca exemplo: button1 Click; form1 Load.

Apostila C#

55

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

56

12
12.1

CONEXAO COM BANCO DE DADOS


O que o ADO.NET ? e

O ADO.NET uma nova tecnologia baseada no ADO (Active Data Objects), com muito mais e recursos. O ADO.NET possui um modelo para manipulao de dados completamente diferente ca da verso anterior do ADO, simplicando o processo de conexo e manipulao de dados. a a ca A arquitetura do ADO.NET foi criada para trabalhar com um ambiente desconectado, ou seja, buscamos as informaes do banco de dados e trazemos para a memria da aplicao. A co o ca manipulao dos dados feita toda em memria e posteriormente enviada ao banco de dados. ca e o Por trabalhar de uma forma voltada ao modelo desconectado, o ADO.NET possui uma camada de persistncia em XML. E poss gravar e ler todo o contedo de todo um conjunto e vel u de armazenado nas estruturas do ADO.NET em XML. O ADO.NET faz parte do .NET Framework, e composto por um conjunto de classes, e interfaces, tipos e enumeraes. co

12.2

Os namespaces relacionados ao ADO.NET

Para trabalharmos com o ADO.NET em uma aplicao .NET, necessrio utilizarmos alca e a gumas das namespaces dispon veis nas bibliotecas do .NET Framework. Alguns dos principais namespace so: a System.Data: Contm a infra-estrutura bsica para trabalharmos com qualquer base de e a dados relacional. Neste namespace encontramos as classes responsveis por armazenar as a estruturas dos bancos relacionais em memria; o System.Data.Common: Contm as interfaces comuns a todos os bancos de dados. Este e namespace utilizado internamente pelo framework e por fabricantes de bancos de dados, e para a construo de bibliotecas de acesso; ca System.Data.SqlClient: Biblioteca de acesso ao SQL Server. Permite a conexo, a extrao a ca e a execuo de comandos em servidores SQL Server de verso 7 ou superior; ca a System.Data.OleDb: Biblioteca de acesso para bancos de dados que suportam OleDb. Per mite conexo, a extrao e a execuo de comandos nestes bancos de dados. E necessrio a ca ca a 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: Contm a denio dos tipos nativos do SQL Server; e ca System.XML: Contm as classes para manipulao de documentos XML. Como o ADO.NET e ca possui uma camada de persistncia em XML, este namespace amplamente utilizado. e e

12.3

O modelo de execuo do ADO.NET ca

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

Figura 1: Esquema acesso ao banco de dados

Para fazer a extrao dos dados, o ADO.NET utiliza os chamados .NET Data Providers. ca Os Data Providers so bibliotecas de classes especializadas para o acesso a um tipo de banco a de dados relacional. Por serem uma implementao espec ca 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 implementao espec ca 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 execuo em um ambiente conectado ca

O ADO.NET capaz de trabalhar com dois modelos, o modelo conectado e o modelo dese conectado. No modelo conectado necessrio manter a conexo aberta enquanto so realizadas e a a a as operaes de leitura e gravao. co ca 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: XxxConnection: E o objeto utilizado para estabelecer a conexo com o banco. E necessrio a a informar os parmetros de conexo e abrir a conexo com o banco. Exemplos dessa classe a a a so SqlConnection e OleDbConnection; a XxxCommand : E um objeto utilizado para enviar comandos a base de dados. E necessrio a montar a clusula Sql desejada e informar ao objeto de comando. Ao executar o comando, a este pode devolver um objeto do tipo XxxDataReader ; XxxDataReader : E um objeto utilizado para ler dados de um comando executado. O mtodo Read l os dados de registro em registro. Aps a leitura completa dos dados e e o e necessrio fechar o DataReader e a conexo; a a

12.5

O modelo de execuo em um ambiente desconectado ca

O modelo de execuo em um ambiente desconectado utiliza outros objetos. Neste modelo ca utilizamos o objeto DataSet para armazenar e manipular os dados em memria e o objeto o XxxDataAdapter para extrair e enviar as alteraes ao banco de dados. O objeto de conexo co a tambm utilizado neste modelo. e e Os passos para extrao e manipulao dos dados em um ambiente desconectado so: ca ca a 1. E aberta uma conexo utilizando um objeto XxxConnection (OleDbConnection ou Sqla Connection por exemplo); 2. E criado um objeto do tipo XxxDataAdapter que responsvel por fazer a extrao de e a ca dados do banco de dados para a memria e o posterior envio dos dados da memria para o o o banco de dados; 3. Utilizando o mtodo Fill, extra e mos os dados da base de dados e armazenamos em um DataSet. Neste momento fechamos a conexo com o banco pois os dados j esto na a a a memria da aplicao para serem manipulados; o ca Apostila C# 58

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

59

4. Como os dados esto em memria, poss a o e vel inserir, remover ou alterar registros do DataSet; 5. Ao nalizar as alteraes, restabelecemos a conexo com o banco de dados para enviar as co a alteraes; co 6. Utilizando o mtodo Update do DataAdapter, enviamos as alteraes para o banco de e co dados. O DataAdapter verica os tipos de alteraes que foram realizadas e executa o co comando correspondente no banco de dados (insero, excluso, atualizao); ca a ca 7. Ao nalizar o processo, fechamos a conexo com o banco de dados. a

12.6

Estabelecendo uma conexo com um banco de dados a

O primeiro passo para criarmos uma aplicao com conexo a um banco de dados estaca a e belecer a conexo com o banco. Para estabelecermos a conexo, devemos criar um objeto de a a conexo. a Ao criarmos uma instncia da classe que ir se conectar, devemos informar uma string de a a conexo, que contm todos os parmetros para a conexo com o banco de dados, como usurio a e a a a e senha. A string de conexo possui uma srie de parmetros, que pode variar de acordo com o banco a e a de dados utilizado. Os parmetros da string de conexo so separados por ponto e v a a a rgula, e devem ser informados com a seguinte notao: ca

Cdigo 62: Padro para Connection Strings o a


1 " Nome do Par^metro a = Valor do Par^metro " a

Abaixo est uma classe com string de conexo para os bancos MySQL, Firebird e Posta a GreSQL respectivamente:

Cdigo 63: Padro para Connection Strings o a


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

E poss executar comando no banco de dados atravs da classe SqlCommand. Ao criar um vel e objeto dessa classe, devemos informar o comando Sql a ser executado, bem como a conexo a ser a utilizada. Estes parmetros podem ser informados tanto no construtor da classe SqlCommand a como tambm atravs das propriedades CommandText e Connection. e e 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 no retornam nenhuma a quer. Cada um destes tipos de comando SQL possui um mtodo para execuo. e ca Atravs da classe SqlCommand tambm poss executar Stored Procedures do banco de e e e vel dados, sendo necessrio apenas informar o nome da stored procedure no parmetro Commanda a Text, e setar a propriedade CommandType da classe para CommandTypes.StoredProcedure. Um exemplo de criao de um objeto de comando pode ser observado a seguir. ca

Cdigo 64: Exemplo de utilizao do comando SqlCommand o ca


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 mtodos de execuo dispon e ca veis. Os mtodos de execuo variam de acordo com a e ca natureza do comando executado. Os trs mtodos mais comuns so: e e a ExecuteNonQuery: Para comandos que no executam consultas (querys); a 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 mtodo ExecuteNonQuery e

O mtodo ExecuteNonQuery utilizado quando queremos executar um comando que no e e a retorna como resultado um conjunto de dados. Este mtodo utilizado para comandos de e e atualizao e insero e tambm para comando DCL (Data Control Language) suportados pelo ca ca e banco de dados. Opcionalmente podemos informar um parmetro para este mtodo para obter o nmero de a e u linhas afetadas pelo comando executado. Um exemplo de utilizao do comando ExecuteNonQuery pode ser observado a seguir. ca

Cdigo 65: Exemplo de utilizao do comando ExecuteNonQuery o ca


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 mtodo ExecuteScalar e

O mtodo ExecuteScalar utilizado para comandos que retornam valores escalares, ou seja, e e valores unicos. Em geral utilizado para comandos que retornam uma contagem de registros e ou que executam ao comando de agregao no banco de dados. ca Este comando pode retornar qualquer tipo de dado. Um exemplo de utilizao do comando ExecuteScalar pode ser observado a seguir. ca

Cdigo 66: Exemplo de utilizao do comando ExecuteScalar o ca


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 mtodo ExecuteReader e

O mtodo ExecuteReader utilizado para executar querys que retornam um conjunto de e e dados. Este mtodo tem como resultado um objeto do tipo SqlDataReader. e 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, necessrio executamos o mtodo Read. Este e a e mtodo retorna verdadeiro caso um registro tenha sido lido do cursor do banco de dados, e falso e quando no houver mais registros a serem lidos. E necessrio chamar o mtodo Read pelo menos a a e uma vez, pois o cursor aberto no ca posicionado no primeiro registro. a Como o DataReader mantm um cursor aberto com o banco de dados, no poss realizar e a e vel nenhuma operao no banco de dados (utilizando a conexo utilizada pelo DataReader ) enquanto ca a o DataReader estiver aberto. Por tanto, necessrio fechar o DataReader imediatamente aps e a o a sua utilizao. ca Um exemplo de utilizao do mtodo ExecuteReader e da classe DataReader pode ser obserca e vado a seguir.

Cdigo 67: Exemplo de utilizao do comando ExecuteReader o ca


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 parmetros a

E poss vel passar parmetros para os objetos da classe SqlCommand. Para indicarmos a parmetros nas querys informadas neste objeto, utilizamos o s a mbolo @ como prexo para indicar um parmetro. Esta sintaxe pode variar de acordo com o banco de dados utilizado (o a Oracle utiliza :por exemplo). Depois de indicar os parmetros na query, preciso adicionar objetos do tipo SqlParameter a e na coleo de parmetros do SqlCommand. A coleo de parmetros pode ser acessada atravs ca a ca a e 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 criao de parmetros pode ser observado a seguir. ca a

Cdigo 68: Exemplo de utilizao de parmetros o ca a


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 um DataSet? e

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

12.11

O que um DataAdapter ? e

O DataAdapter a classe responsvel por fazer a interao entre a base de dados e o DataSet. e a ca Ela possui quatro propriedades que representam os quatro comandos principais que utilizamos para interagir com o banco de dados. Para realizar a extrao de dados do banco de dados para o DataSet, o DataAdapter usa o ca comando de select, contido na propriedade SelectCommand. Aps extrairmos os dados para o DataSet, podemos modicar estes dados (que esto armao a ` zenados em memria). A medida que modicamos os dados do DataSet, este faz uma marcao o ca

Apostila C#

63

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

64

nas alteraes que fazemos, marcando as linhas inseridas como inseridas, modicadas como moco dicados e exclu dos como exclu dos. Quando conclu mos as alteraes, poss co e vel chamar o DataAdapter novamente para que ele execute para cada linha modicada o comando correspondente a modicao realizada. ca

12.12

Criando um DataSet e um DataAdapter

Quando criamos um DataAdapter poss e vel informar uma query e uma conexo para a a extrao dos dados. O SqlCommand referente ` propriedade SelectCommand criado automaca a e ticamente. Os outros comandos devem ser criados manualmente. Um exemplo de criao de um objeto DataAdapter pode ser observado a seguir. ca

Cdigo 69: Criando um DataSet e um DataAdapter o


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 mtodo Fill do DataAdapter, e informando o DataSet e nome da tabela a ser criada no DataSet. Um exemplo de criao de um DataSet e utilizao de um DataAdapter podem ser observados ca ca a seguir.

Cdigo 70: Criando e preenchendo um DataSet o


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

Anda mungkin juga menyukai