Vous êtes sur la page 1sur 49

Apostila C#

Conceitos Bsicos a

Universidade Tecnolgica Federal do Paran o a

Diogo Cezar Teixera Batista

Cornlio Procpio e o

23 de setembro de 2008

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

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro 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) . . . . . . . . . . . . . . . . . . . . . 8 8 8 9 9 9 9 9 9 11 11 11 12 13 14 14 15 16 17 17 18 20 22 22 24 25

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 23 de setembro 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

25 26 28 29 29 30 30 31 31 31 32 33 33 34 35 35 36 36 37 38 38 39 40 40 42 42 43 44 45 45 46

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 Manipulao de Arquivos ca 10.1 Classes DirectoryInfo e FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1.1 Criando diretrios e subdiretrios . . . . . . . . . . . . . . . . . . . . . . . o o

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

10.1.2 Acessando as propriedades

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

47 48 48 48 49

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

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro 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 13 15 26 41 46 46

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 12 14 15 16 16 16 16 17 18 18 19 19 19 20 21 22 22 23 24 25 26 27 27 28 29 29 30 30 30 31

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 23 de setembro 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

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32 33 34 34 35 35 36 37 37 39 41 42 43 43 45 46 47 47 47 48 48 48 49

Criando arquivos com a classe FileInfo . . . . . . . . . . . . . . . . . . . . . . . . Abrindo arquivos com a classe FileInfo . . . . . . . . . . . . . . . . . . . . . . . . Escrevendo/Lendo com FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . CreateText e OpenText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro 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 mecane ca ca ismo de herana, controle de excees e depurao entre linguagens de programao diferc co ca ca entes; 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 23 de setembro de 2008

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, e ca

derivada 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#

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

10

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, atribuies a ca o co incorretas etc. 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 GC o e (Garbage Collector ), e no diretamente pelo programador, reduzindo as chances de comea ter erros comuns a linguagens de programao onde o gerenciamento da memria feito ca o e diretamente pelo programador.

Apostila C#

10

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

11

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#

11

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

12

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#

12

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

13

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#

13

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

14

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#

14

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

15

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#

15

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

16

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#

16

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

17

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 valor e 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# 17

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

18

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#

18

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

19

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#

19

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

20

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 opa erador ternrio representado por interrogao (?:). E chamado de operador ternrio por possuir a ca a 3 expresses: a primeira refere-se a condio boolena, a segunda se a condio verdadeira e a o ca ca e 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# 20

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

21

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#

21

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

22

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#

22

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

23

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#

23

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

24

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#

24

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

25

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#

25

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

26

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 utica ca a a lizado entre strings representam concatenao. No entanto, quando existem strings e nmeros na ca u Apostila C# 26

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

27

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#

27

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

28

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#

28

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

29

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#

29

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

30

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, localco o ca izao 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#

30

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

31

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#

31

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

32

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#

32

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

33

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 biba ca a lioteca 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#

33

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

34

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#

34

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

35

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# 35

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

36

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 certa e a forma pode se dizer que este tipo de classe uma classe conceitual que pode denir funcionalie dades 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 de a o e a e total obrigatoriedade a implementao de todos os mtodos em suas subclasses, em uma classe ca e abstrata os mtodos declarados podem ser abstratos ou no, e suas implementaes devem ser e a co obrigatrias na subclasse ou no, quando criamos um mtodo abstrato em uma classe abstrata o a e sua implementao obrigatria, caso voc no implemente o mesmo o compilador criar um ca e o e a a erro em tempo de compilao. ca O mesmo se tm com mtodos abstratos, no se pode herda-los. e e a

Apostila C#

36

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

37

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#

37

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

38

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 sobree a a a vel scrita.

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#

38

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

39

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 classes aba ca ca stratas depende das necessidades e design do nosso projeto. Podemos fazer uma classe abstrata,

Apostila C#

39

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

40

interface, ou at uma combinao de ambas dependendo de nossas necessidades. Se desejarmos e ca criar uma classe ou mtodo interno para um componente ou library o ideal utilizar o tipo sealed e e porque qualquer tentativa de anular algumas das suas funcionalidades no ser permitida. a a 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 repa e resent-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#

40

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

41

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 sobrecara regada. 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#

41

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

42

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 exe ca emplo fechar um arquivo ou uma conexo. a Apostila C# 42

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

43

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#

43

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

44

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#

44

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

45

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

Manipulao de Arquivos ca
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#

45

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

46

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 arco quivo 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#

46

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

47

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#

47

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

48

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#

48

Apostila C#
Diogo Cezar Teixera Batista 23 de setembro de 2008

49

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#

49

Vous aimerez peut-être aussi