Vous êtes sur la page 1sur 139

Linguagem de Programao C#

1

SUMRIO
CAPTULO 1 Reviso .................................................................................................................................... 3
1.1 Lgica .......................................................................................................................................................... 3
1.1.1 Sequncia Lgica...................................................................................................................................... 3
1.2 Algoritmo ..................................................................................................................................................... 3
1.2.1 Formas de Representao de Algoritmos .................................................................................................. 3
1.2.2 Regras para construo do Algoritmo ........................................................................................................ 6
1.2.3 Fases Fundamentais ................................................................................................................................. 6
1.2.4 Estrutura de um Algoritmo ......................................................................................................................... 6
1.3 Comando ESCREVA ................................................................................................................................... 7
1.4 Comando LEIA ............................................................................................................................................ 8
1.5 Variveis ...................................................................................................................................................... 8
1.6 Comandos de Atribuio .............................................................................................................................. 9
1.7 Operadores .................................................................................................................................................. 9
1.7.1 Operadores Aritmticos ............................................................................................................................. 9
1.7.2 Operadores Relacionais .......................................................................................................................... 10
1.7.3 Operadores Lgicos ................................................................................................................................ 10
1.8 Funes Intrnsecas ................................................................................................................................... 11
1.8.1 Funes Aritmticas ................................................................................................................................ 11
1.9 Comandos para controle de Fluxo .............................................................................................................. 13
1.9.1 Estrutura de Sequncia ........................................................................................................................... 13
1.9.2 Estrutura de Seleo ............................................................................................................................... 13
1.9.3 Estruturas de Repetio .......................................................................................................................... 18
CAPTULO 2 Visual C# 2008 Express................................................................................................ ........ 24
2.1 Instalando o Visual C# 2008 Express ......................................................................................................... 24
2.2 Introduo ao Visual C# Express ............................................................................................................... 28
CAPTULO 3 Introduo ao IDE do Visual C# 2008 Express ............................................................ ........ 30
3.4 Primeiro Programa ......................................................................................................................... ........ 39
3.4.1 Main........................................................................................................................................................ 39
3.5 Estrutura de um programa .............................................................................................................. ........ 40
CAPTULO 4 Variveis na Linguagem C# ......................................................................................... ........ 41
4.1 Tipos de dados .......................................................................................................................................... 41
4.1.1 Tipos Valor e Tipos Referncia ............................................................................................................... 41
4.1.2 Converso de Tipos ................................................................................................................................ 41
4.1.3 O Objeto Convert .................................................................................................................................... 42
4.2 Arrays ........................................................................................................................................................ 42
CAPTULO 5 Operadores ................................................................................................................... ........ 44
5.1 Operadores Aritmticos.............................................................................................................................. 44
5.2 Operadores de Incremento e Decremento .................................................................................................. 46
5.3 Operadores Lgico, Relacional e Condicional ............................................................................................ 46
5.4 Operao de Atribuio.............................................................................................................................. 46
CAPTULO 6 Comandos .................................................................................................................... ........ 47
6.1 Seleo ..................................................................................................................................................... 47
6.1.1 Comando if ............................................................................................................................................. 47
6.1.2 Comando switch ..................................................................................................................................... 49
6.2 Loop .......................................................................................................................................................... 50
6.2.1 Comando for ........................................................................................................................................... 50
6.2.2 Comando foreach.................................................................................................................................... 52
6.2.3 Comandos do - while .............................................................................................................................. 53
CAPTULO 7 Desenvolvimento de aplicaes com C# .................................................................... ........ 54
CAPTULO 8 Converso de Tipos com C# ........................................................................................ ........ 75
8.1 Problema na Converso de Tipos .............................................................................................................. 75
CAPTULO 9 Programao baseada em Objetos ............................................................................. ........ 92
9.1 Convenes e Padres de Nomenclatura................................................................................................... 92
9.1.1 Nomeao de variveis ........................................................................................................................... 93
9.1.2 Nomeao de classes, mtodos, propriedades, entre outros. .................................................................. 93
9.2 Classes ...................................................................................................................................................... 93
9.3 Propriedades ............................................................................................................................................. 94
9.4 Modificadores de visibilidade ...................................................................................................................... 94
9.5 Herana ..................................................................................................................................................... 95
Linguagem de Programao C#

2

9.5.1 This e Base ............................................................................................................................................. 95
9.6 Declarao e Chamada de Mtodos e Objetos ........................................................................................... 96
9.7 Mtodos e Atributos Static ......................................................................................................................... 96
9.8 Const e ReadOnly ...................................................................................................................................... 96
9.9 Classes e Mtodos Abstratos ..................................................................................................................... 97
9.10 Interfaces ................................................................................................................................................. 97
9.11 Mtodos Virtuais ...................................................................................................................................... 98
9.12 Classes e Mtodos sealed - Finais ........................................................................................................... 98
9.13 Quando devo utilizar o que? ..................................................................................................................... 99
CAPTULO 10 Tratamento de Erros e Excees............................................................................... ...... 100
10.1 Comando throw...................................................................................................................................... 100
10.2 Bloco try - catch ..................................................................................................................................... 101
10.3 Bloco try - finally ..................................................................................................................................... 101
10.4 Bloco try - catch - finally ......................................................................................................................... 102
10.5 A classe Exception ................................................................................................................................. 103
CAPTULO 11 - Funes Matemticas ................................................................................................. ...... 104
11.1 Funes para manipular Strings no C# ................................................................................................... 104
Captulo 12 - Funes para Manipulao de Arquivos ....................................................................... ...... 108
12.1 Classes DirectoryInfo e FileInfo .............................................................................................................. 108
12.1.1 Criando diretrios e subdiretrios ........................................................................................................ 109
12.1.2 Acessando as propriedades ................................................................................................................ 109
12.2 Criando arquivos usando a classe FileInfo ............................................................................................. 110
12.2.1 Entendendo o mtodo Open() ............................................................................................................. 110
12.2.2 Entendendo a classe FileStream ......................................................................................................... 110
12.2.3 Mtodos CreateText() e OpenText() .................................................................................................... 111
CAPTULO 13 Aprofundando Windows Forms ................................................................................. ...... 112
13.1 Aplicaes MDI ...................................................................................................................................... 112
13.1.1 Adicionando uma nova janela filha ...................................................................................................... 112
3.1.2 Fechando uma janela filha .................................................................................................................... 113
13.2 Aplicaes SDI....................................................................................................................................... 113
13.2.1 Exemplo mltiplos formulrios ............................................................................................................. 113
13.3 Passando valores entre Forms ............................................................................................................... 114
13.4 Posicionando os formulrios na tela ....................................................................................................... 114
13.5 Controlando os eventos dos formulrios ................................................................................................. 114
CAPTULO 14 Conexo com Banco de Dados ................................................................................. ...... 115
14.1 O que o ADO.NET ?............................................................................................................................ 115
14.2 Os namespaces relacionados ao ADO.NET ........................................................................................... 115
14.3 O modelo de execuo do ADO.NET ..................................................................................................... 115
14.4 O modelo de execuo em um ambiente conectado ............................................................................... 116
14.5 O modelo de execuo em um ambiente desconectado ......................................................................... 117
14.6 Estabelecendo uma conexo com um banco de dados .......................................................................... 117
14.7 Criando comandos ................................................................................................................................. 118
14.8 Executando comandos ........................................................................................................................... 118
14.8.1 O mtodo ExecuteNonQuery ............................................................................................................... 118
14.8.2 O mtodo ExecuteScalar..................................................................................................................... 118
14.8.3 O mtodo ExecuteReader ................................................................................................................... 119
14.9 Passando parmetros ............................................................................................................................ 119
14.10 O que um DataSet?........................................................................................................................... 120
14.11 O que um DataAdapter? .................................................................................................................... 120
14.12 Criando um DataSet e um DataAdapter................................................................................................ 120
14.13 Criando e preenchendo um DataSet..................................................................................................... 121
CAPTULO 15 Operaes CRUD com Entity Framework ................................................................. ...... 122
CAPTULO 16 - Conexo C# com o MYSQL......................................................................................... ...... 128
16.1 Insero de dados em MySQL ............................................................................................................... 131
CAPTULO 17 - Gerando um Executvel a partir de um Windows Forms .......................................... ...... 136



Linguagem de Programao C#

3

CAPTULO 1 Reviso

1.1 Lgica
A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento
de sistemas e programas, ela permite definir a sequncia lgica para o desenvolvimento.
"Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo."

1.1.1 Sequncia Lgica
Estes pensamentos podem ser descritos como uma sequncia de instrues, que devem ser
seguidas para se cumprir uma determinada tarefa.
"Sequncia Lgica so passos executados at atingir um objetivo ou soluo de um problema."

1.2 Algoritmo
Algoritmo uma sequencia de aes finitas encadeadas e lgicas que descrevem como um
determinado problema deve ser resolvido.
Um algoritmo formalmente uma sequencia finita de passos que levam a execuo de uma tarefa.
Podemos pensar em algoritmo como uma receita, uma sequencia de instrues que executam uma meta
especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua def inio, devem ser claras e
precisas.
Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio,
multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de
aparelhos eletrnicos, como um aparelho de som, que explicam passo-a-passo como, por exemplo, gravar
um evento.
At mesmo as coisas mais simples do nosso dia a dia, podem ser descritas por sequencias lgicas.
Apesar do nome pouco usual, algoritmos so comuns em nosso cotidiano, como por exemplo, uma receita
de bolo. Nela est descrita uma srie de ingredientes necessrios e uma sequencia de diversos passos
(aes) que devem ser fielmente cumpridos para que se consiga fazer o alimento desejado, conforme se
esperava, antes do incio das atividades (objetivo bem definido).
Observa-se, porm que uma ordem isolada no permite realizar o processo completo, para isso
necessrio um conjunto de instrues colocadas em ordem sequencial lgica. No exemplo do pargrafo
anterior para fazermos um bolo no podemos comear por colocar os ingredientes no forno. necessrio
todo um processo passo a passo para se chegar a este fim.

1.2.1 Formas de Representao de Algoritmos
Existem diversas formas de representao de algoritmos, mas no h um consenso com relao
melhor forma delas.
O critrio usado para classificar hierarquicamente estas formas est diretamente ligado ao nvel de
detalhe, inversamente ao grau de abstrao oferecido.
Algumas formas de representao de algoritmos tratam os problemas apenas em nvel lgico,
abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma linguagem de
programao especfica. Por outro lado, existem formas de representao de algoritmos que possuem
uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a ideia principal, o algoritmo,
dificultando seu entendimento.
Linguagem de Programao C#

4

Dentre as formas de representao de algoritmo mais conhecidas, destacam-se:
- A descrio narrativa;
- O fluxograma convencional;
- O pseudocdigo, tambm conhecido como linguagem estruturada ou Portugol.
A) Descrio Narrativa
Nesta forma de representao, os algoritmos so expressos em linguagem natural.
Exemplo:
Receita de um bolo
1. Separar os ingredientes
2. Bater os ovos em neve na batedeira
3. Acrescentar acar e farinha de trigo
4. Colocar extrato de baunilha
5. Acrescentar uma colher de manteiga
6. Acrescentar uma colher de Fermento em p
7. Verificar se esta doce o suficiente
8. Colocar na forma
9. Colocar no forno e assar
10. Retirar do forno
11. Tirar da forma e servir
12. Fim do processo

Quando elaboramos um algoritmo devemos especificar aes claras e precisas, que a partir de um
estado inicial, aps um perodo de tempo finito, produzem um estado final previsvel e bem definido. Isto
significa que o algoritmo fixa um padro de comportamento a ser seguido, uma norma de execuo a ser
trilhada, com vistas a alcanar, como resultado final, a soluo de um problema, garantindo que sempre
que executado, sob as mesmas condies, produza o mesmo resultado.
A importncia de se construir um algoritmo: conseguimos visualizar e testar ainda no papel, a
soluo criada com lgica de programao sem nos preocupar com detalhes computacionais e uma vez
concebida uma soluo algortmica para um problema, esta pode ser traduzida facilmente para qualquer
linguagem de programao e ser agregada das funcionalidades disponveis nos diversos ambientes, ou
seja, a codificao.

B) Diagrama de Bloco ou Fluxograma
O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um
determinado processamento. Com o diagrama podemos definir uma sequncia de smbolos, com
significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um
processamento.
Existem diversos smbolos em um diagrama de bloco. Veja no quadro abaixo alguns dos smbolos
que iremos utilizar:


Linguagem de Programao C#

5

Smbolo Nome Significado

Terminal Smbolo usado como ponto para indicar o incio e
fim do fluxo de um programa.

Seta de fluxo de dados Permite indicar o sentido do fluxo de
dados. Serve exclusivamente para conectar os smbolos ou
blocos existentes.

Processamento Smbolo ou bloco que se utiliza para indicar
clculos (algoritmos) e efetuar, atribuies de valores qualquer
manipulao de dados que tenha um bloco especfico para sua
descrio.

Entrada de dados ou Leitura dos dados Utilizado para ler os
dados necessrios ao programa.

Sada de dados em vdeo utiliza-se este smbolo quando se
quer mostrar dados na tela do vdeo.

Sada de dados em impressora utilizado quando se deseja
que os dados sejam impressos.

Deciso Indica a deciso que deve ser tomada, indicando a
possibilidade de desvios para outros pontos do fluxo,
dependendo do resultado de comparao e de acordo com
situaes variveis.

Conector Utilizado quando preciso particionar o diagrama.
Quando ocorrer mais de uma partio, colocada uma letra ou
nmero dentro do smbolo de conexo para identificar os pares
de ligao.

Conector Especfico para indicar conexo do fluxo em outra
pgina.

Repetio Indica repetio do tipo para. Caracteriza-se por
efetuar um lao por um determinado nmero de vezes
previamente definido

C) Pseudocdigo
Como foi visto at agora, o fluxograma convencional a primeira forma de notao grfica, mas
existe outra, que uma tcnica narrativa denominada pseudocdigo, tambm conhecida como portugus
estruturado ou chamada por alguns de portugol.
Esta tcnica de algoritmizao baseada em uma PDL Program Design Language (Linguagem
de Projeto de Programao). Aqui vamos apresent-la em portugus. A forma original de escrita
conhecida como ingls estruturado, muito parecida com a notao da linguagem PASCAL.
A PDL (neste caso, o pseudocdigo) usada como referncia genrica para uma linguagem de
projeto de programao, tendo como finalidade mostrar uma notao para elaborao de algoritmos, os
quais sero utilizados na definio, criao e desenvolvimento de uma linguagem computacional (Clipper,
C, Fortran, Pascal, Delphi, Visual-Objects) e sua documentao. Abaixo apresentado um exemplo deste
tipo de algoritmo.
Os algoritmos so independentes das linguagens de programao. Ao contrrio de uma
linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo.
O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio
entre a linguagem falada e a linguagem de programao.
Linguagem de Programao C#

6

D) Portugol
A maioria esmagadora das linguagens de programao de computadores em lngua inglesa. Para
facilitar o aprendizado de lgica de programao foram criadas algumas pseudolinguagens.
O Portugol uma pseudolinguagem de programao, uma simbiose de Portugus, Algol e Pascal,
criada originalmente em ingls, com a proposta de ser independente da linguagem nativa (ou seja, exi ste
em japons, javans, russo...).
Basicamente, uma notao para algoritmos, a ser utilizada na definio, criao,
desenvolvimento e documentao dos programas.
Algumas Palavras Chave: Inicio, Fim, Algoritmo, Enquanto, Se, ento, Para, At, At que, Leia,
Escreva, Faa, Repita, FimSe, FimEnquanto, FimSelecione, entre outras que veremos adiante.

1.2.2 Regras para construo do Algoritmo
Para escrever um algoritmo precisamos descrever a sequencia de instrues, de maneira simples e
objetiva. Para isso utilizaremos algumas tcnicas:
1. Usar somente um verbo por frase
2. Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com
informtica
3. Usar frases curtas e simples
4. Ser objetivo
5. Evite usar palavras que tenham sentido dbio
6. Procure dividir o problema em etapas menores.

1.2.3 Fases Fundamentais
Vimos que ALGORITMO uma sequencia lgica de instrues que podem ser executadas.
importante ressaltar que qualquer tarefa que siga comportamento padro pode ser descrita por
um algoritmo.
Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs
fases fundamentais.

ENTRADA: So os dados de entrada do algoritmo
PROCESSAMENTO: Procedimentos utilizados para chegar ao resultado final
SADA: So os dados j processados

1.2.4 Estrutura de um Algoritmo
Nome do algoritmo
Declarao das variveis
Inicio
Corpo do algoritmo, composto por comando de entrada e sada, operadores, estruturas
de deciso, de repetio, chamadas de funes e etc.
Fim do Algoritmo
Linguagem de Programao C#

7

A) Exemplo de Algoritmo
Imagine o seguinte problema: Calcular a mdia final dos alunos. Pelas provas os alunos recebero
2 notas: N1, N2. Onde:
N1 + N2
Mdia Final = --------------------
2
Para montar o algoritmo proposto, faremos trs perguntas:

a) Quais so os dados de entrada?
R: Os dados de entrada so N1, N2
b) Qual ser o processamento a ser utilizado?
R: O procedimento ser somar todos os dados de entrada e dividi-los por 2 (dois)
c) Quais sero os dados de sada?
R: O dado de sada ser a mdia final
INICIO do algoritmo
| Receba a nota da prova1
| Receba a nota de prova2
| Some todas as notas e divida o resultado por 2
| Mostre o resultado da diviso
FIM do algoritmo

B) Teste de Mesa
Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de TESTE
DE MESA, que significa, seguir as instrues do algoritmo de maneira precisa para verificar se o
procedimento utilizado est correto ou no.
Veja o exemplo: Nota da Prova 1 Nota da Prova 2 Nota da Prova 3 Nota da Prova 4
Utilize a tabela abaixo:
P1 P2 P3 P4 Mdia



EXERCCIOS
1) Crie uma sequncia lgica para tomar banho.
2) Faa um algoritmo para somar dois nmeros e multiplicar o resultado pelo primeiro nmero.
3) Descreva com detalhes a sequncia lgica para trocar um pneu de um carro.
4) Faa um algoritmo para trocar uma lmpada. Descreva com detalhes.

1.3 Comando ESCREVA
O comando 'escreva' faz com que algo seja exibido na tela. pode ser qualquer coisa: Variveis,
nmeros, caracteres, espaos em branco e tudo mais que seu teclado puder digitar. seguido de
parnteses com o que ser exibido na tela. Exemplo:
escreva ("Isso ser exibido na tela");

Linguagem de Programao C#

8

Voc tambm pode fazer:
Algoritmo exemplo
var
x : inteiro;
inicio
x <- 5
escreva (x);
fim-algoritmo

1.4 Comando LEIA
O comando leia serve para entrada de dados, que evidentemente sero armazenados em uma
varivel. Ele vem seguido do nome da varivel em que voc quer que o valor digitado seja atribudo.

Exemplo
escreva ("Digite seu nome: ");
leia (nome);
escreva ("Bom dia ",nome);
//Agora o valor da varivel 'nome' o valor que o usurio digitou

Depois de ter armazenado a informao do usurio em uma varivel, voc pode us-la como
quiser.
1.5 Variveis
Varivel a representao simblica dos elementos de um certo conjunto. Cada varivel
corresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempo durante a
execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar
um valor a cada instante.

1.5.1 Tipos de Variveis
As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres,
Alfanumricas ou lgicas.
- Numricas Especficas para armazenamento de nmeros, que posteriormente podero ser
utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais. As variveis do tipo inteiro
so para armazenamento de nmeros inteiros e as Reais so para o armazenamento de nmeros que
possuam casas decimais.
- Caracteres Especficos para armazenamento de conjunto de caracteres que no contenham
nmeros (literais). Ex: nomes.
- Alfanumricas Especficas para dados que contenham letras e/ou nmeros. Pode em
determinados momentos conter somente dados numricos ou somente literais. Se usado somente para
armazenamento de nmeros, no poder ser utilizada para operaes matemticas.
- Lgicas Armazenam somente dados lgicos que podem ser Verdadeiro ou Falso.

1.5.2 Declarao de Variveis
As variveis s podem armazenar valores de um mesmo tipo, de maneira que tambm so
classificadas como sendo numricas, lgicas e literais.


Linguagem de Programao C#

9

EXERCCIOS
1. Marque as variveis como I Inteiro, R Real, B Lgico, L Literal, N No possvel definir.
( ) F. ( ) n1 ( ) .F ( ) .F.
( ) 75,0 ( ) 1 ( ) Cinco ( ) V
( ) 2 ( ) 0, ( ) +32.7 ( ) M
( ) .V. ( ) -0,01 ( ) V
2. Marque as variveis como V Variveis Vlidas, I Variveis Invlidas.
( ) Nome Usuario ( ) Endereco ( ) Fone$Com
( ) Nome_Usuario ( ) 2B ( ) 21Brasil
( ) Ab ( ) eEnd* ( ) +32.7
( ) A B ( ) Cidade3 ( ) #CAEB
( ) NomeUsuario ( ) N1 ( ) N!
1.6 Comandos de Atribuio
O comando de atribuio simplesmente define o valor de uma varivel onde o tipo do dado
atribudo para a varivel necessita ser compatvel com o tipo declarado para a mesma. O smbolo de
atribuio a seta para a esquerda, veja no exemplo abaixo:
Algoritmo:
Varivel valor, varivel ou expresso;
Em pascal
Varivel := valor, varivel ou expresso;
Em outras linguagens derivadas da linguagem C
Varivel = valor, varivel ou expresso;
Obs: Na linguagem Pascal/Delphi, o comando de atribuio o := (dois pontos igual) e nas
linguagens como o C ou suas derivadas (C++, JAVA, C#, PHP, javascript, etc.) usa-se somente o = (igual)
para atribuir valor em uma varivel.

1.7 Operadores
Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e avaliamos
dados dentro do computador. Temos trs tipos de operadores:
- Operadores Aritmticos
- Operadores Relacionais
- Operadores Lgicos

1.7.1 Operadores Aritmticos
Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio,
subtrao, multiplicao e diviso, podem utilizar tambm o operador para exponenciao. Os smbolos
para os operadores aritmticos podem ser vistos ao lado:






Operao Smbolo
Adio +
Subtrao -
Multiplicao *
Diviso /
Exponenciao ** ou ^
Linguagem de Programao C#

10

Hierarquia das Operaes Aritmticas
1 ( ) O que estiver entre Parnteses
2 Exponenciao
3 Multiplicao, diviso (o que aparecer primeiro)
4 + ou (o que aparecer primeiro)

Exemplos:
- TOTAL = PREO * QUANTIDADE
- 1 + 7 * 2 ** 2 1 = 28
- 3 * (1 - 2) + 4 * 2 = 5

1.7.2 Operadores Relacionais
Os operadores relacionais so utilizados para comparar String de caracteres e nmeros. Os valores
a serem comparados podem ser caracteres ou variveis.
Igual a =
Diferente de <> ou =
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=
Estes operadores sempre retornam valores lgicos (Verdadeiro ou Falso/ True ou False)
Para estabelecer prioridades no que diz respeito a qual operao executar primeiro, utilize os
parnteses. Os operadores relacionais so:
Exemplos: Tendo duas variveis A = 5 e B = 3 , os resultados das expresses seriam:
d Resultado
A = B Falso
A <> B Verdadeiro
A > B Verdadeiro
A < B Falso
A >= B Verdadeiro
A <= B Falso

1.7.3 Operadores Lgicos
Os operadores lgicos servem para combinar resultados de expresses, retornando se o resultado
final verdadeiro ou falso. Os operadores lgicos so:
E (And) A expresso verdadeira se todas as condies forem verdadeiras
OU (Or) A expresso verdadeira se pelo menos uma condio for verdadeira
NO (Not) Inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-
versa.

Linguagem de Programao C#

11

Conjuno (E)
O resultado ser verdadeiro se e somente se os operandos forem verdadeiros
A B A (E) B
V V V
F V F
F F F
V F F
Disjuno (OU)
O resultado ser falso se, e somente se ambos os operandos forem falsos
A B A (OU) B
V V V
V F V
F V V
F F F
A tabela mostra todos os valores possveis criados pelos trs operadores lgicos.
Exemplos: Suponha que temos trs variveis A = 5, B = 8 e C =1. Os resultados das expresses
seriam:








1.8 Funes Intrnsecas
So funes que resumem uma srie se operaes bsicas. Podem ser Aritmticas, quando no
tratamento de nmeros e Literais quando no tratamento de alfanumricos.

1.8.1 Funes Aritmticas
Sintaxe Descrio
Caracter Caracter(Num) Fornece o caracter correspondente a Num (entre 1 e 255) de acordo
com a tabela ASCII
Int Int(Num) Arredonda um nmero real Num para baixo, retornando a parte
inteira mais prxima.
Raiz Raiz(Num) Retorna uma raiz quadrada de Num.
Abs Abs(Nm) Retorna o valor absoluto de Num, que um nmero sem o respectivo
sinal.
Div Div(Num;Divisor) Retorna o quociente da diviso de Num por divisor.
Mod Mod(Num;Divisor) Retorna o resto depois da diviso de Num por divisor.
Expresses Resultado
A = B AND B > C Falso
A <> B OR B < C Verdadeiro
A > B NOT Verdadeiro
A < B AND B > C Verdadeiro
A >= B OR B = C Falso
A <= B NOT Falso.
Linguagem de Programao C#

12


1.8.2 Funes Literais Usuais
Sintaxe Descrio
Ltrim Ltrim(Texto) Elimina de Texto espaos em branco esquerda.
Rtrim Rtrim(Texto) Elimina de Texto espaos em branco direita.
Comp Comp(Texto) Fornece o total de caracteres de Texto incluindo espaos em
branco.
Direita Direita(Texto;NCaract) Retorna os ltimos NCaract caracteres em Texto.
Esquerda Esquerda(Texto;Nm_Caract) Retorna os primeiros Nm_Caract caracteres em Texto.
Sub Sub(Texto; N; M) Resulta uma parte de Texto que comea no caracter de numero
N e tem tamanho M
Pos Pos(Texto; Parte) Indica a posio da primeira ocorrncia de Parte em Texto
ASCII ASCII(Texto) Fornece o valor inteiro correspondente ao primeiro caractere de
Texto, segundo a tabela ASCII

EXERCCIOS
1) Identifique os dados de entrada, processamento e sada no algoritmo abaixo
- Receba cdigo da pea
- Receba valor da pea
- Receba Quantidade de peas
- Calcule o valor total da pea (Quantidade * Valor da pea)
- Mostre o cdigo da pea e seu valor total
2) Faa um algoritmo para Calcular o estoque mdio de uma pea, sendo que
ESTOQUEMDIO = (QUANTIDADE MNIMA + QUANTIDADE MXIMA) /2
3) Teste o algoritmo anterior com dados definidos por voc.
4) Defina as regras, faa o algoritmo e o fluxograma para ler as coordenadas de dois pontos no
plano cartesiano e imprimir a distncia entre estes dois pontos. OBS: frmula da distncia entre dois
pontos (x
1
,y
1
) e (x
2
, y
2
):

5) Defina as regras, faa o algoritmo e o fluxograma que dado o preo de um produto em reais,
converter e imprimir este valor para o equivalente em dlares. O programa dever ler o preo do produto
em reais e o preo do dlar.
6) Defina as regras, faa o algoritmo e o fluxograma para calcular e imprimir o salrio bruto a ser
recebido por um funcionrio em um ms. O programa dever ler os seguintes dados: nmero de horas que
o funcionrio trabalhou no ms, valor recebido por hora de trabalho.
7) O custo ao consumidor, de um carro novo, a soma do custo de fbrica com a percentagem do
distribuidor e dos impostos (aplicados ao custo de fbrica). Supondo que a percentagem do distribuidor
seja de 28% e os impostos de 45%, definir as regras, escrever o algoritmo e o fluxograma para ler o custo
de fbrica de um carro, calcular e escrever o custo ao consumidor.
8) Definir as regras, escrever o algoritmo e o fluxograma que calcule o tempo que um objeto
arremessado verticalmente para cima levar para atingir uma determinada altura. Considerar que a altura
a ser atingida, bem como a velocidade inicial do objeto, sero lidos pelo programa.


9) Defina as regras, faa o algoritmo e o fluxograma que dado um nmero inteiro, obter seu ltimo
algarismo.
10) Defina as regras, faa o algoritmo e o fluxograma que dado um nmero inteiro de 3 algarismos,
inverter a ordem de seus algarismos. Os 3 algarismos do nmero dado so diferentes de zero.
) ( ) (
1 2 1 2
2 2
y y x x
+
0
2
2
= + h vt
gt
Linguagem de Programao C#

13

1.9 Comandos para controle de Fluxo
Para representar a soluo de um problema devemos escrever o conjunto de passos a serem
seguidos, sendo que, a maioria dos problemas exigem uma dinmica na sua soluo, impondo assim que
os algoritmos executem conjunto de instrues de acordo com as possveis situaes encontradas no
problema original. E de acordo com a Programao Estruturada os mecanismos utilizados para esse
controle so : Sequncia, Seleo e Repetio.

1.9.1 Estrutura de Sequncia
Usada para executar comandos passo a passo, sabendo que todos eles sero executados na
ordem de escrita, sem nenhum desvio. Uma sequncia pode possuir um ou vrios comandos, os quais
devem ser delimitados pelos identificadores Incio e Fim.
Inicio
Comando_1
Comando_2
Comando_3
...
Comando_n
Fim

1.9.2 Estrutura de Seleo
Em Operaes Lgicas, verificamos que na maioria das vezes necessitamos tomar decises no
andamento do algoritmo. Essas decises interferem diretamente no andamento do programa.
Trabalharemos com dois tipos de estrutura. A estrutura de deciso SE e a estrutura de deciso mltipla
(CASO).

A) Comando SE
Os comandos de deciso ou desvio fazem parte das tcnicas de programao que conduzem a
estruturas de programas que no so totalmente sequenciais. Com as instrues de SALTO ou DESVIO
pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decises lgicas
tomadas em funo dos dados ou resultados anteriores. As principais estruturas de deciso so: Se
Ento, Se ento Seno e Caso Selecione.

SE ENTO / IF ... THEN
A estrutura de deciso SE/IF normalmente vem acompanhada de um comando, ou seja, se
determinada condio for satisfeita pelo comando SE/IF ento execute determinado comando. Imagine um
algoritmo que determinado aluno somente estar aprovado se sua mdia for maior ou igual a 5.0, veja no
exemplo de algoritmo como ficaria.
SE MEDIA >= 5.0
ENTO
ALUNO APROVADO

Linguagem de Programao C#

14

SE ENTO SENO / IF ... THEN ... ELSE
A estrutura de deciso SE/ENTO/SENO, funciona exatamente como a estrutura SE, com
apenas uma diferena, em SE somente podemos executar comandos caso a condio seja verdadeira,
diferente de SE/SENO pois sempre um comando ser executado independente da condio, ou seja,
caso a condio seja verdadeira o comando da condio ser executado, caso contrrio o comando da
condio falsa ser executado.
Em algoritmo ficaria assim:
SE MDIA >= 5.0
ENTO
ALUNO APROVADO
SENO
ALUNO REPROVADO
Em fluxogramas as estruturas de deciso do tipo Se so representadas assim:

Os smbolos que estiverem na direo de True sero executados caso o teste seja verdadeiro. J
os smbolos que estiverem na direo de false sero executados caso o teste tenha um resultado falso.
Imagine a seguinte situao: em uma empresa, ser solicitado o salrio de um determinado
funcionrio, para se calcular seu novo salrio, sendo que, se este tiver um salrio superior a R$ 300.00, o
reajuste ser de 5%, caso contrrio o reajuste ser de 8%.
Observe que teremos que testar o valor do salrio, para saber o ndice a ser aplicado. Vamos criar
ento um pseudocdigo com este objetivo:
Algoritmo testa_salario
Variveis
Real Salario
Real Salario_final
Inicio
Escreva('Informe o seu salario: ')
Leia (Salario)
Se (Salario <= 300) ENTO
Salario_final = (Salario * 1,08)
SENO
Salario_final = (Salario * 1,05)
Fim_se
Escreva ('Salario_final')
Fim.

Linguagem de Programao C#

15

Observe o trecho do pseudocdigo acima, representado no fluxograma:

B) CASO SELECIONE / SELECT ... CASE
A estrutura de deciso CASO/SELECIONE utilizada para testar, na condio, uma nica
expresso, que produz um resultado, ou, ento, o valor de uma varivel, em que est armazenado um
determinado contedo. Compara-se, ento, o resultado obtido no teste com os valores fornecidos em cada
clusula Caso.
No exemplo do diagrama de blocos abaixo, recebido uma varivel Op e testado seu contedo,
caso uma das condies seja satisfeita, atribudo para a varivel Titulo a String Opo X, caso contrrio
atribudo a string Opo Errada.
Em fluxogramas so representadas assim:

Vamos imaginar um exemplo parecido, de reajuste de salrio, porm teremos as seguintes
situaes para reajuste:
Linguagem de Programao C#

16

- Salrios inferiores a R$ 400,00 = reajuste de 9%
- Salrios iguais a R$ 400,00 e inferiores a R$ 800,00 = reajuste de 7%
- Salrios iguais a R$ 800,00 e inferiores a R$ 1000,00 = reajuste de 5%
- Fora das faixas supra citadas = reajuste de 3%
Veja o pseudocdigo do exemplo citado:
Algoritmo testa_salario2
Variaveis
Real Salario , Salario_final
Inicio
Leia (Salario)
Faca caso
Caso salario < 400
Salario_final = (salario * 1.09)
Caso salario >= 400 .e. salario < 800
Salario_final = (salario * 1.07)
Caso salario>=800 .e. salario < 1000
Salario_final = (salario * 1.05)
Outro caso
Salario_final = (salario * 1.03)
Escreva (Salario_final)
Fim.

Observe que, temos aqui uma novidade, ou seja, em uma nica condio, estamos na verdade
realizando dois testes, isto porque usamos o operador lgico AND .e., ou seja, se salrio menor ou igual
a 400 e salrio menor que 800 faa isso... assim sucessivamente.
Quando usamos o operador lgico .e., os testes, neste caso dois, que formam o caso, devem ser
verdadeiros. O outro operador lgico .ou., retorna verdadeiro caso um dos testes que formam o conjunto
satisfaa a uma determinada condio.

EXERCCIOS
1) Faa um algoritmo e o fluxograma que leia um nmero e imprima caso seja maior do que 20.

2) Joo Papo-de-Pescador, homem de bem, comprou um microcomputador para controlar o
rendimento dirio de seu trabalho. Toda vez que ele traz um peso de peixes maior que o
estabelecido pelo regulamento de pesca do estado de So Paulo (50 quilos) deve pagar um multa
de R$ 4,00 por quilo excedente. Joo precisa que voc faa um diagrama de blocos que leia a
varivel P (peso de peixes) e verifique se h excesso. Se houver, gravar na varivel E (Excesso) e
na varivel M o valor da multa que Joo dever pagar. Caso contrrio mostrar tais variveis com o
contedo ZERO.

3) Elabore um algoritmo e o fluxograma que leia as variveis C e N, respectivamente cdigo e nmero
de horas trabalhadas de um operrio. E calcule o salrio sabendo-se que ele ganha R$ 10,00 por
hora. Quando o nmero de horas exceder a 50 calcule o excesso de pagamento armazenando-o na
varivel E, caso contrrio zerar tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do
processamento imprimir o salrio total e o salrio excedente.

4) Desenvolva um algoritmo e o fluxograma que:
- Leia 4 (quatro) nmeros;
- Calcule o quadrado de cada um;
- Se o valor resultante do quadrado do terceiro for >= 1000, imprima-o e finalize;
- Caso contrrio, imprima os valores lidos e seus respectivos quadrados.
Linguagem de Programao C#

17

5) Faa um algoritmo e o fluxograma que leia um nmero inteiro e mostre uma mensagem indicando
se este nmero par ou mpar, e se positivo ou negativo.

6) A Secretaria de Meio Ambiente que controla o ndice de poluio mantm 3 grupos de indstrias
que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at
0,25. Se o ndice sobe para 0,3 as indstrias do 1 grupo so intimadas a suspenderem suas
atividades, se o ndice crescer para 0,4 as indstrias do 1 e 2 grupo so intimadas a suspenderem
suas atividades, se o ndice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas
atividades. Faa um algoritmo e o fluxograma que leia o ndice de poluio medido e emita a
notificao adequada aos diferentes grupos de empresas.

7) Elabore um algoritmo e o fluxograma que dada a idade de um nadador classifique-o em uma das
seguintes categorias:
- Infantil A = 5 a 7 anos
- Infantil B = 8 a 11 anos
- Juvenil A = 12 a 13 anos
- Juvenil B = 14 a 17 anos
- Adultos = Maiores de 18 anos

8) Faa um algoritmo e o fluxograma que leia dois valores numricos e efetue a adio, caso o
resultado seja maior que 10 apresent-lo.
9) Faa um algoritmo e o fluxograma que leia um nmero e informe se ele ou no divisvel por 5.
10) Faa um algoritmo e o fluxograma que leia um nmero e informe se ele divisvel por 3 e por 5.
11) Faa um algoritmo e o fluxograma que leia um nmero e informar se ele divisvel por 10, ou
divisvel por 5, ou divisvel por 2 ou se no divisvel por nenhum destes.
12) Faa um algoritmo e o fluxograma que leia um nmero e indique se o nmero digitado est
compreendido entre 20 e 90 ou no.
13) Faa um algoritmo e o fluxograma que leia um nmero e imprimir uma das mensagens: maior do
que 20, igual a 20 ou menor do que 20.
14) Faa um algoritmo e o fluxograma que leia um nmero e informe se sua raiz quadrada inteira.
15) Faa um algoritmo e o fluxograma que leia o nome, a nota da PR1 e a nota da PR2 de 1 aluno.
Imprimir: nome, nota da PR1, nota da PR2, mdia aritmtica e uma das mensagens: AP, RP ou PF
(a mdia 7 para aprovao (AP), menor que 3 para reprovao (RP) e as demais em prova final
(PF)).
16) Faa um algoritmo e o fluxograma que leia o nome da capital do Brasil. Se a resposta estiver
correta, imprimir PARABNS, caso contrrio, ERROU. (Considerar: BRASLIA ou Braslia).
17) Faa um algoritmo e o fluxograma que leia dois nmeros e exiba se o primeiro divisvel pelo
segundo.
18) Faa um algoritmo e o fluxograma que leia dois nmeros sendo o 1 o divisor e o 2 o dividendo e
informe se o quociente inteiro.
19) Faa um algoritmo e o fluxograma que leia dois nmeros e imprima uma mensagem dizendo se
so iguais ou diferentes.
20) Faa um algoritmo e o fluxograma que leia dois nmeros e imprima o maior nmero (suponha
nmeros diferentes).
21) Faa um algoritmo e o fluxograma que leia dois nmeros e imprima o menor nmero (suponha
nmeros diferentes).
22) Faa um algoritmo e o fluxograma que leia dois nmeros e imprima-os em ordem crescente
(suponha nmeros diferentes).
Linguagem de Programao C#

18

23) Faa um algoritmo e o fluxograma que leia dois nmeros e imprima-os em ordem decrescente
(suponha nmeros diferentes).
24) Faa um algoritmo e o fluxograma que leia trs nmeros e imprima o maior nmero(suponha
nmeros diferentes).
25) Faa um algoritmo e o fluxograma que leia trs nmeros e armazene o maior nmero na varivel
de nome maior (suponha nmeros diferentes).
26) Faa um algoritmo e o fluxograma que leia trs nmeros e imprima-os em ordem crescente
(suponha nmeros diferentes).
27) Faa um algoritmo e o fluxograma que leia trs nmeros e imprima-os em ordem decrescente
(suponha nmeros diferentes).
28) Faa um algoritmo e o fluxograma que leia trs nmeros e armazene-os em trs variveis com os
seguintes nomes: maior, intermedirio e menor (suponha nmeros diferentes).
29) Faa um algoritmo e o fluxograma que leia cinco nmeros inteiros e identificar o maior e o menor
valor.
30) Faa um algoritmo e o fluxograma que leia o salrio de uma pessoa e imprima o desconto do INSS
segundo a tabela abaixo:
Faixa Desconto
Menor ou igual a R$ 600,00 isento
Maior que R$ 600,00 e menor ou igual a R$ 1200,00 20%
Maior que R$ 1200,00 e menor ou igual a R$ 2000,00 25%
Maior que R$ 2000,00 30%

31) Um comerciante comprou um produto e quer vend-lo com um lucro de 45% se o valor da compra
for menor que R$ 20,00 caso contrrio, o lucro ser de 30%. Faa um algoritmo e o fluxograma que
leia o valor do produto e imprima o valor da venda.
32) Faa um algoritmo e o fluxograma que leia o ano de nascimento de uma pessoa e o ano atual.
Imprima a idade da pessoa. No se esquea de verificar se o ano de nascimento um ano vlido,
isto , menor que o ano atual.
33) Faa um algoritmo e o fluxograma que leia o nome, sexo e idade de uma pessoa. Se a pessoa for
do sexo feminino e tiver menos que 25 anos ento imprimir nome e a mensagem: ACEITA, caso
contrrio, imprimir nome e a mensagem: NO ACEITA.(considerar f e F)
34) Faa um algoritmo e o fluxograma que leia a idade de uma pessoa e informe a sua classe eleitoral:
- no eleitor (abaixo de 16 anos)
- eleitor obrigatrio ( entre 18 e 65 anos)
- eleitor facultativo ( entre 16 e 18 anos e maior de 65 anos)

1.9.3 Estruturas de Repetio
Em linguagem de programao, as estruturas de repetio so conhecidas como laos (loops).
Trabalhamos basicamente com dois tipos de estruturas de repetio:
- Loops contados: quando se tem, de forma prvia, o nmero de vezes que uma determinada
sequncia de comandos ser executada.
- Loops condicionais: aqueles que no possuem um nmero pr-determinado de vezes que a
estrutura de comandos ser executada, porm este nmero estar vinculado a uma
determinada condio.
Os laos de repetio so muito teis e muito utilizados, pois possibilitam a facilidade de repetir um
certo trecho de programa por um determinado nmero de vezes. O nmero de vezes que um lao pode
repetir um trecho de programa pode ser previamente conhecido ou no, vai depender da caracterstica de
execuo do lao.
Linguagem de Programao C#

19

Um lao de repetio em que se conhece o nmero de vezes que ele ser executado
predeterminado, pois sabe-se quando comea e quando termina. Porm, h ainda a possibilidade de
desenvolver um lao de repetio indeterminado, ou seja, sabe-se quando ele comea, mas no se sabe
quando ele termina, pois apenas o usurio do programa que determina o final.
Para os laos predeterminados, de forma geral podem ser usados os tipos de laos de repetio:
ENQUANTO, REPITA e PARA. Para os laos indeterminados, podem ser usados apenas os laos de
repetio dos tipos ENQUANTO e REPITA.
Os laos de repetio dos tipos ENQUANTO e REPITA so controlados pelo uso de condio, logo
so laos de repetio condicionais. J o lao de repetio do tipo PARA incondicional, pois no faz uso
do conceito de condies.
De forma geral, quando h necessidade de trabalhar com um lao de repetio predeterminado,
utiliza-se o conceito PARA, deixando os conceitos de laos de repetio ENQUANTO e REPITA para
situaes de laos indeterminados. Apesar desta caracterstica operacional, nesta obra sero utilizados
todos os tipos de lao para demonstrar suas aplicaes nas mais variadas situaes.

A) LAO ENQUANTO
O lao de repetio do tipo enquanto caracteriza-se por efetuar um teste condicional no incio do
lao. Desta forma, possvel verificar se permitido executar o trecho de instrues subordinado
condio. Para este tipo de estrutura ser utilizado o cdigo em portugus estruturado enquanto...faa e
fim_enquanto.
Portugus estruturado
Enquanto (<condio>) faa
Instrues executadas enquanto condio for verdadeira
Fim_enquanto
Em fluxogramas so representadas assim:

B) LAO REPITA
O lao de repetio do tipo repita caracteriza-se por efetuar um teste condicional no final do lao.
Desta forma, as instrues subordinadas ao lao sero executadas no mnimo uma vez. Para este tipo de
estrutura ser utilizado o cdigo em portugus estruturado repita e at_que.

Portugus Estruturado
Repita
Instrues executadas at que condio torne-se verdadeira
At_que (<condio>)

Linguagem de Programao C#

20

Em fluxogramas so representadas assim:

C) LAO PARA
O lao de repetio do tipo para caracteriza-se por efetuar um lao por um determinado nmero de
vezes previamente definido. Para este tipo de estrutura ser utilizado o cdigo em portugus estruturado
para...de...at...passo...faa e fim_para.
Portugus Estruturado
Para varivel de incio at final passo incremento faa
Instrues executadas at contador atingir seu final
Fim_para
Em fluxogramas so representadas assim:

EXERCCIOS

1. Construa um algoritmo e o fluxograma que exiba em um monitor uma contagem decrescente do
valor 30 at o valor 1.

2. Elabore um programa em fluxograma e pseudocdigo que apresente os nmeros pares de 1 a 100.

3. Faa um algoritmo e o fluxograma que leia 50 nmeros inteiros, conte quantos so divisveis por 3
e exiba o resultado.

4. Faa um algoritmo e o fluxograma que leia 40 nmeros reais, somar e calcular a mdia dos
nmeros positivos e contar os nmeros negativos e exiba os resultados.

Linguagem de Programao C#

21

5. Faa um algoritmo e o fluxograma que leia o nome e a idade de 20 pessoas, calcule e exiba a
mdia das idades.
6. Faa um algoritmo e o fluxograma que leia o sexo (Masculino / Feminino) e o salrio de 15
pessoas, calcule e exiba a mdia dos salrios dos homens e das mulheres.
7. Uma fbrica tem 10 representantes. Cada um recebe uma comisso calculada a partir do nmero
de itens de um pedido, segundo os seguintes critrios:
- para menos de 20 itens vendidos, a comisso de 10% do valor total do pedido;
- para pedidos de 20 e 49 itens, a comisso de 15% do valor total do pedido;
- para pedidos de 50 a 74 itens, a comisso de 20% do valor total do pedido; e
- para pedidos iguais ou superiores, a 75 itens a comisso de 25%.

8. Faa um programa que processe 10 pedidos. Para cada pedido o programa deve ler o cdigo do
representante (1 a 10), o total de itens e o valor total do pedido. O programa deve informar:
- o valor da comisso de cada pedido;
- o total de vendas dos pedidos processados;
- o total de comisses para cada representante; e
- o total de comisses que a companhia pagou aos seus representantes.

9. Em uma pesquisa perguntou-se a cada aluno quantas refeies fez no ms anterior. Faa um
algoritmo e o fluxograma que leia o nmero de refeies dirias de 350 alunos e calcule e exiba:
- o nmero de alunos que fez menos de 10 refeies no ms;
- o nmero de alunos que fez entre 10 e 20 refeies; e
- o nmero de alunos que fez mais de 20 refeies.

10. Um total de 500 alunos de uma universidade foram entrevistados. De cada um deles foram
colhidas as seguintes informaes: o cdigo do curso que frequenta (1-engenharia; 2-computao;
3-administrao) e a idade. Faa um algoritmo e o fluxograma que processe estes dados e que
fornea as seguintes informaes:
- nmero de alunos por curso;
- nmero de alunos com idade entre 20 e 25 anos, por curso; e
- qual o curso com menor mdia de idade.

11. Uma confeco fabrica os produtos da tabela abaixo, identificados pelo seu cdigo e com o preo
correspondente:

Faa um algoritmo e o fluxograma que processe diversos pedidos feitos a esta confeco. Em cada
pedido sero especificados os produtos pedidos, identificados atravs de seu cdigo, e a quantidade
pedida de cada produto. O programa dever calcular o total a pagar de cada pedido. No final dos 100
pedidos, o programa dever fornecer um relatrio de vendas, com as seguintes informaes:
- total vendido de cada produto;
- total vendido de todos os produtos;
- total vendido em reais;
- valor mdio de pedido (em reais).
Linguagem de Programao C#

22

12. Uma pesquisa sobre algumas caractersticas fsicas da populao de uma determinada regio
coletou os seguintes dados, referentes a cada habitante, para anlise:
- sexo ( M - masculino, F - feminino);
- cor dos olhos (A - azuis, V - verdes, C - castanhos);
- cor dos cabelos (L - loiros, C - castanhos, P - pretos);
- idade em anos.
Para cada um dos 2000 habitantes foi preenchido um carto com estes dados. Fazer um programa
que calcule e exiba:
- a maior idade dos habitantes;
- a mdia da idade dos habitantes;
- a quantidade de habitantes do sexo feminino cuja idade est entre 18 e 35 anos, inclusive, e
que tenham olhos verdes e cabelos loiros;
- a quantidade de habitantes do sexo masculino cuja idade est entre 20 e 25 anos, inclusive,
e que tenham olhos pretos e cabelos castanhos.

13. Faa um algoritmo e o fluxograma em Pascal que leia um numero N, some todos os nmeros
inteiros entre 1 e N, e mostre o resultado obtido.

14. Faa um algoritmo e o fluxograma em Pascal que leia um nmero e divida-o por dois
(sucessivamente) at que o resultado seja menor que 1. Mostre o resultado da ltima diviso
efetuada.

15. Escreva um algoritmo e o fluxograma em Pascal que leia 50 valores e encontre o maior e o menor
deles. Mostre o
resultado.

16. Escrever um algoritmo e o fluxograma em Pascal que leia um nmero n que indica quantos valores
devem ser lidos a seguir. Para cada nmero lido, mostre uma tabela contendo o valor lido e o
fatorial deste valor.

17. Escrever um algoritmo e o fluxograma em Pascal que l um conjunto no determinado de valores,
um de cada vez, e escreve uma tabela com cabealho, que deve ser repetido a cada 20 linhas. A
tabela conter o valor lido, seu quadrado, seu cubo e sua raiz quadrada.

18. Escrever um algoritmo e o fluxograma em Pascal que l um nmero no determinado de valores
para m, todos inteiros e positivos, um de cada vez. Se m for par, verificar quantos divisores possui
e escrever esta informao. Se m for impar e menor do que 10 calcular e escrever o fatorial de m.
Se m for impar e maior ou igual a 10 calcular e escrever a soma dos inteiros de 1 at m.

19. Foi feita uma pesquisa entre os habitantes de uma regio. Foram coletados os dados de idade,
sexo (M/F) e salrio. Faa um algoritmo e o fluxograma que informe:
a) a mdia de salrio do grupo;
b) maior e menor idade do grupo;
c) quantidade de mulheres com salrio at R$100,00.
Encerre a entrada de dados quando for digitada uma idade negativa.

20. Escreva um algoritmo e o fluxograma em Pascal que gere os nmeros de 1000 a 1999 e escreva
aqueles que dividido por 11 do resto igual a 5.

21. Escreva um programa em Pascal que leia 500 valores inteiros e positivos e:
a) encontre o maior valor;
b) encontre o menor valor;
c) calcule a mdia dos nmeros lidos.


Linguagem de Programao C#

23

22. Faa um algoritmo e o fluxograma em Pascal que leia dois nmeros X e N. A seguir , mostre o
resultado das divises de X onde , aps cada diviso por N , X passa a ter como contedo o
resultado da diviso anterior e N decrementado de 1 , em 1 , ate chegar a 2.

23. Faa um algoritmo e o fluxograma em Pascal que leia um nmero e, a seguir, leia uma lista de
nmeros at achar um nmero igual ao primeiro lido . Mostre todos os nmeros lidos.
24. Faa um algoritmo e o fluxograma em Pascal que leia e mostre um texto, caracter a caracter, at
encontrar a sequencia de caracteres "/*". A sequencia de caracteres que determina o final do texto
tambm deve ser mostrada.

25. Faa um algoritmo e o fluxograma em Pascal que leia um nmero X e , a seguir, leia e mostre uma
lista de nmeros com o trmino da lista ocorrendo quando a soma de dois nmeros consecutivos
da lista for igual a X.

26. Faa um algoritmo e o fluxograma em Pascal que leia um nmero inteiro N , calcule e mostre o
maior quadrado menor ou igual a N.
Por exemplo, se N for igual a 38, o Menor quadrado 36 (quadrado de 6).

27. Faa um algoritmo e o fluxograma em Pascal que leia uma lista de letras terminada pela letra "Z" .
Ao final o algoritmo deve mostrar a quantidade lida de cada vogal.

28. Faa um algoritmo e o fluxograma em Pascal que leia o nmero de andares de um prdio e, a
seguir, para cada andar do prdio, leia o nmero de pessoas que entraram e saram do elevador.
Considere que o elevador est vazio e est subindo , os dados se referem a apenas uma subida
do elevador e que o nmero de pessoas dentro do elevador sempre ser maiores ou iguais a 0.
Se o nmero de pessoas , aps a entrada e sada for maior que 15, deve ser mostrada a
mensagem EXCESSO DE PASSAGEIROS . DEVEM SAIR" em seguida, o nmero de pessoas
que devem sair do elevador, de modo que seja obedecido o limite de 15 passageiros.
Aps a entrada de pessoas no ltimo andar o algoritmo deve mostrar quantas pessoas iro descer.

29. Num frigorfico existem 90 bois. Cada boi traz em seu pescoo um carto contendo um nmero
de identificao e seu peso. Escrever um algoritmo e o fluxograma em Pascal que leia o carto e o
peso dos 90 bois e ao final imprima o nmero e o peso do boi mais gordo e dos bois mais magro.

30. Escreva um algoritmo e o fluxograma em Pascal que.
a) leia uma letra do alfabeto;
b) a seguir leia outra letra que suceda a primeira, mas no necessariamente vizinha da mesma;
c) imprima todas as letras do alfabeto situadas entre as duas primeiras, incluindo-as.

31. Escreva um algoritmo e o fluxograma em Pascal que leia um caracter, mas s aceite se o mesmo
for alfabtico maisculo. O programa em Pascal deve ficar em loop at que a condio imposta
seja atingida.

32. Uma determinada companhia deseja obter o resultado de uma pesquisa, relacionada com um novo
tipo de produto lanado. As respostas dos entrevistados devem entrar pelo teclado da seguinte
maneira:
- se o cliente gostou ser digitada a letra S, maiscula;
- se o cliente no gostou ser digitada a letra N, maiscula;
- se no for digitada S ou N, o algoritmo deve emitir uma mensagem de erro;

Quando o usurio quiser ver o resultado da pesquisa deve apertar a tecla ESC e o algoritmo deve
apresentar No vdeo o resultado da pesquisa, obedecendo ao seguinte critrio:

BOM : se a maioria responder S.
RUIM : se a maioria responder N.
EMPATE : caso ocorra empate.
Linguagem de Programao C#

24

CAPTULO 2 Visual C# 2008 Express
2.1 Instalando o Visual C# 2008 Express
Primeiro voc dever efetuar o download do produto, que pode ser encontrado no seguinte link:
http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express
Aps abrir a pgina, algumas opes estaro disponveis. Vamos baixar o Visual Studio Express
2008, que a verso gratuita do Visual Studio. Lembrando que nada impede que voc baixe e instale
outra que no seja a verso Express.
Na tela que ser exibida, escolha a opo desejada. Neste exemplo, escolhi a opo completa, e
foi apresentado um link para baixar a imagem do CD de instalao(.ISO).

Clicando no boto FREE DOWNLOAD, o download ser iniciado.
Agora temos duas opes, ou gravamos o arquivo em um dvd, utilizando por exemplo o Nero
atravs da funcionalidade de gravao de dvd a partir de um arquivo de imagem, ou emulamos o DVD
atravs do Alcohol ou do Daemon Tools (Freeware).
Assim que o DVD tenha sido introduzido, o instalador ser carregado automaticamente. Na tela
inicial basta clicar no link "Install Visual Studio 2008" para comear instalao.
Clique no Visual C # 2008 Express Edition link.
Linguagem de Programao C#

25


Em seguida, a instalao ir copiar os recursos necessrios para a pasta temporria.

Em seguida, a instalao ir carregar os componentes de instalao.

Se no houver o Visual Studio 2008 SP1 instalado (no caso da mquina j tenha instalado o Visual
Studio 2008), a seguinte mensagem de erro ser exibida.

Clique em avanar para a pgina de boas vindas.
Linguagem de Programao C#

26


Aceite os termos do contrato de licena e clique em Avanar

Nesta instalao que incluem a instalao da verso MS SQL Express. Em seguida, selecione a
caixa de seleo e clique em Avanar

Linguagem de Programao C#

27

Neste caso, no podemos alterar o caminho de instalao, pois a verso completa do Visual Studio
2008 j est instalado nesta mquina. Esta pgina tambm apresenta um resumo dos produtos e
componentes a serem instalados. Clique em Instalar.

A instalao deve comear imediatamente.

Linguagem de Programao C#

28


Se no ocorrer nenhum erro, ser apresentada ao final a mensagem para reiniciar o computador
para finalizar a instalao.


2.2 Introduo ao Visual C# Express
Este material inicia o aprendizado na linguagem C# desenvolvida especialmente para a plataforma
.NET. Ao acompanhar esta apostila voc aprender a criar pequenos aplicativos para desktop. Veremos
aqui os conceitos bsicos da linguagem C# e a IDE Visual Studio, para um melhor aproveitamento do .NET
Framework. Para um melhor entendimento dos captulos seguintes, importante ter conhecimento em
lgica de programao. Qualquer dvida em relao a lgica de programao pode ser encontrada no
captulo 1.
Ento voc instalou o Visual C# Express Edition no seu computador e agora quer saber o que fazer
com ele. Visual C# uma linguagem de programao eficiente projetada para criar uma ampla gama de
aplicativos que vo desde utilitrios at aplicativos corporativos completos. O Visual C# Express Edition
fornece um ambiente sofisticado para criar e testar aplicativos baseados no Windows.
Voc j usou aplicativos do Windows Forms. Programas da Microsoft como o Word, o Excel, o
PowerPoint, o Internet Explorer e as janelas exibidas dentro desses aplicativos (para abrir, salvar e
imprimir arquivos) so todos aplicativos do Windows Forms. Esses aplicativos no podem ser escritos no
Visual C#, embora demonstrem a funcionalidade que possvel colocar nos aplicativos do Visual C#
Express. possvel fazer praticamente tudo usando a linguagem de programao C# escrever jogos de
computador, gerenciar sistemas corporativos e bancos de dados, desenvolver aplicativos Web e criar
aplicativos do Windows Forms para ajudar nas tarefas pessoais e profissionais do dia-a-dia.
Linguagem de Programao C#

29

A parte realmente importante
Em programao, como em todas as outras profisses, as pessoas que tm mais sucesso so
aquelas que amam o que fazem. Se voc gosta de programao, achar difcil se privar de aprender
coisas novas. Sua necessidade de conhecimento o levar adiante e estudar mais ser apenas algo que
acontecer ao longo do caminho.

A linguagem
A linguagem de programao C# (l-se C Sharp) surge como uma evoluo da linguagem "C" e
destina-se a aplicaes utilizando o .NET Framework, utilizando os novos conceitos de Orientao a
Objetos (OO).
O C# uma soluo poderosa, produtiva e fcil de usar. Veja o porqu de escolher esta linguagem
- C# oferece o mesmo poder que o C++
- Facilidade de programao assim como no Visual Basic
- Linguagem nativa da Plataforma .NET
- C# oferece poder , facilidade e flexibilidade
- Resolve o abismo entre as linguagens de baixo nvel e alto nvel
- Uma mesma aplicao possa ser executada em diversos dispositivos de hardware(PCs,
Handhelds e qualquer outro dispositivo mvel.
Alm dessas caractersticas, o C# por ser uma linguagem da Microsoft e a mesma possuir
parcerias com muitas empresas, faz com que a empresa sinta-se mais segura em trabalhar com a
linguagem. Sendo assim, com toda a certeza voc pode investir no aprendizado da linguagem, pois, no
faltar oportunidades no mercado de trabalho.

O .NET Framework
O Framework essencial para rodar vrios programas que foram desenvolvidos com o uso dessa
tecnologia da Microsoft. Ou seja, o modelo da plataforma .NET para construir, instalar e rodar qualquer
aplicao, no desktop ou na Internet. Para executar um programa .NET, preciso ter o Framework
instalado.
Verses do FRAMEWORK: 1.0, 1.1, 2.0, 3.0, 3.5
Como saber qual verso do Framework est instalada no seu PC?
A forma manual de verificar qual verso do Microsoft .NET Framework est instalada no seu
computador atravs do Adicionar ou Remover Programas do Painel de Controle. Porm, voc pode
utilizar o ASoft .NET Version Detector, uma ferramenta gratuita e porttil. Ela d informaes sobre as
diferentes verses do Microsoft .NET que esto instalados no seu computador.
Basicamente definido como um componente integral do Windows responsvel por fornecer os
servios necessrios, para construo e carregamento de aplicaes para Windows e Web.
O . NET Framework utiliza o CLR (Common Language Run Time) sendo uma base para o .NET
Framework, disponibilizando:
- Interoperabilidade de linguagem;
- Suporte de verses aprimorado;
- Segurana aprimorada;
- Garbage Colection.
Tambm utiliza o Framework Class Library (Biblioteca de Classes) e tem como agente um servio
de Run Time que gerencia o cdigo durante a execuo do aplicativo.
Linguagem de Programao C#

30

CAPTULO 3 Introduo ao IDE do Visual C# 2008 Express
A melhor maneira se aprender rodando o Visual C#. Voc poder rodar o C# da mesma maneira
que roda qualquer aplicao Windows, como segue abaixo:
- Dando um duplo-clique no cone do Visual C#, na rea de trabalho (desktop) ou no menu INICIAR
>> Todos os Programas >> Visual C# 2008 Express.

A figura abaixo mostra como o Visual Studio 2008 ir aparecer quando for rodado pela primeira vez:


Linguagem de Programao C#

31

Para criarmos uma aplicao no Visual C# podemos clicar na opo File >> New Project contida na
Tela Inicial. A seguir deveremos escolher o programa C#, o Windows Forms Application, o nome e o local
do projeto a ser criado, conforme apresentado na figura abaixo:


Ao clicar no boto OK, o C# criar um diretrio com o nome do seu projeto, contendo toda a
estrutura de diretrios e arquivos deste projeto.
Linguagem de Programao C#

32

DICA: O local padro para criao deste diretrio em MEUS DOCUMENTOS / Visual Studio 2008 /
Projects. Se voc quiser copiar um projeto de um computador para o outro, copie todo o diretrio para um
pendrive ou compacte o diretrio do seu projeto para envi-lo por email, por exemplo.

3.1 IDE - Ambiente de Desenvolvimento Integrado

O ambiente do Visual C# repleto de detalhes. O primeiro passo PE criar um projeto, o qual pode
conter vrias classes, cdigos que podem ser executados separadamente ou juntos, dependendo da
aplicao que construiu.

Linguagem de Programao C#

33

1 Menu de opes: muitas funes podem ser acessadas por ele, tais como salvar o
projeto, adicionar classe, formulrios, compilar o projeto, configurar o ambiente de acordo
com suas necessidades, como por exemplo, ajustar a fonte e seu tamanho, cor de letra e
cor de fundos, entre outros.

2 Barra de Ferramentas: atalho para acesso a determinadas funes do menu, como
salvar e criar projeto e fechar o atual.

3 Janela de cdigo/Formulrio: Onde sero adicionados cdigos para que a aplicao
possa funcionar corretamente.



Linguagem de Programao C#

34

4 Solution Explorer ou Explorando a Soluo: possibilita todo o controle necessrio da
aplicao, permitindo criar pastas e adicionar referncias de outras aplicaes prontas
atual.

5 Janela de propriedades: possvel configurar algumas propriedades em tempo de construo de
projeto. Ela ser bastante utilizada quando criarmos aplicaes visuais.


Linguagem de Programao C#

35

6 Toolbox: d acesso aos componentes que podem ser adicionados ao objeto principal (formulrio),
sejam eles label, textbox, combobox, Button, entre outros.

3.2 Atalhos de teclado
Nome Teclas de Atalho Descrio
Ativar menu de
aplicativo
ALT + a BARRA DE
ESPAOS
Abre o menu programa, permitindo que o usurio para Gerenciar o
estado do janela do aplicativo, por exemplo, mover ou
redimensionar.
Ativar menu janela
do documento
ALT + HFEN Abre o menu documento, permitindo que o usurio para Gerenciar
o estado da janela de documento ativo, por exemplo, mover ou
redimensionar.Disponvel somente enquanto no modo MDI de
dentro de uma janela de documentos.
Ativar menu janela
Ferramenta
ALT + HFEN Abre o menu Janela ferramenta, permitindo que o usurio mover a
janela Ferramenta dentro de IDE.Disponvel somente enquanto
dentro de uma janela Ferramenta.
Fechar aplicativo ALT + F4 Fecha o IDE.
Fechar documento CTRL+F6 Fecha o documento como aplicativo ativo.
Recolher Tudo ns
de rvore
Num + - Recolhe Tudo ns no modo de Exibir de rvore atual.
Linguagem de Programao C#

36

Expandir Tudo ns
de rvore
Num + * Expande Tudo ns no modo de Exibir de rvore atual.
Mover para barra de
menus
ALT Ativa a barra de menus principal IDE.
Mover para Avanar
barra de ferramentas
CTRL + TAB Move para o Avanar barra de ferramentas visvel.Disponvel
somente enquanto o barra de menus principal Est Ativo.
Mover para barra de
ferramentas anterior
CTRL + SHIFT + TAB Move para a barra de ferramentas visvel anterior.Disponvel
somente enquanto o barra de menus principal Est Ativo.
Mover para barra de
ferramentas da
janela Ferramenta
SHIFT + ALT Ativa a barra de ferramentas Janela ferramenta.Disponvel
somente enquanto em uma janela Ferramenta contendo uma barra
de ferramentas.
Mover o foco de
rvore para baixo
CTRL + DOWN. Move o foco em modo de Exibir de rvore para baixo sem alterar a
seleo.Esse atalho pode ser usado para selecionar Mltiplo itens
de rvore.
Mover o foco de
rvore para cima
CTRL + UP Move o foco em modo de Exibir de rvore backup sem alterar a
seleo.Esse atalho pode ser usado para selecionar Mltiplo itens
de rvore.
Menu de atalho SHIFT + F10 Exibe o menu de atalho.
Alternar drop-Para
Baixo Lista
visibilidade
F4 Oculta e mostra uma lista Soltar-Para Baixo.Disponvel somente
enquanto dentro de uma lista Soltar-Para Baixo.
Alternar rvore foco
seleo
CTRL + SPACEBAR Alterna uma seleo para o foco atual em modo de Exibir de
rvore.
3.3 Criando a primeira aplicao Windows e como criar corretamente uma
interface de usurio (formulrio)
1 - Entre no visual Studio .NET.
2 Crie um novo projeto, do tipo Windows Application. O projeto ser chamado de WinHello.
3 O Visual Studio .NET cria e mostra um formulrio formado em Windows no modo Design.
4 Agora, vamos criar a nossa interface com o usurio.
5 Na barra de ferramentas do Visual Studio .NET, clique em Toolbox ( esquerda do formulrio) ou no
menu View Toolbox.
6 Arraste da barra de ferramenta o controle LAbel e posicione-o no canto superior esquerdo do
formulrio.
Linguagem de Programao C#

37

7 Para colocar um controle no formulrio, voc pode, tambm, dar um clique duplo sobre ele na barra de
ferramentas ou clicar uma vez sobre a barra de ferramentas e, depois, clicar no formulrio. O clique duplo
posiciona o controle no canto superior esquerdo, enquanto a segunda opo coloca o controle no local em
que voc clicar.
8 Tambm coloque no formulrio um controle TextBox e um controle Button.
9 Na janela Solution Explorer, clique no boto View Code.
10 O cdigo do arquivo Form1.cs aparecer.
11 Para voltar ao modo design, tambm na janela Solution Explorer, clique em View Design.
12 Form1.cs tem todo o cdigo gerado automaticamente pelo Visual Studio .NET. Note os seguintes
elementos no cdigo:
As diretivas usadas no incio do cdigo referenciando os namespaces:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
O Visual Studio .NET usa o mesmo nome do projeto para criar o namespace principal:
namespace WinHello
{
...
}
Uma classe chamada Form1 dentro do namespace WinHello:
Namespace WinHello
{
Public class Form1 ...
{
...
}
}
O constructor (construtor) um mtodo especial que tem o mesmo nome da classe. o primeiro
mtodo a ser executado quando o programa iniciado:
Public class Form1 ...
{
...
Public Form1 ( )
{
...
}
}
Linguagem de Programao C#

38

O cdigo dentro do mtodo chamado InitializeComponent configura as proprieddes dos controles
que adicionamos no modo Design. Ateno: no modifique o contedo do InitializeComponent diretamente
no cdigo, use a janela Properties no modo Design.
13 Agora, vamos definir as propriedades dos controles inseridos. Para isso, volte ao modo Design.
14 Para voltar ao modo Design, tambm na janela Solution Explorer, clique em View Design.
15 D um clique sobre button1, para selecion-lo.
16 Na janela Properties, altere a propriedade Text de button1 para OK.
17 Se no localizar a janela Properties, clique em F4, ou, no menu View, clique em Properties Window.
18 Altere tambm a propriedade Text do label1 para Digite o seu nome.
19 Altere agora a propriedade Text do controle textBox1 para aqui.
Nota: as propriedades modificadas na janela Properties ficam em negrito. Assim, voc pode saber se elas
esto com seu valor padro ou no.
20 Selecione o formulrio clicando sobre ele.
Importante: aparecem alguns marcadores em volta do formulrio, que ajudam a redimension-lo.
21 Clique sobre o marcador central na parte de baixo do Form1 e, mantendo o boto pressionado,
arraste para cima.
22 O procedimento tambm serve para outros controles. Clique sobre os outros controles e note os
marcadores.
Feito isso, vamos escrever o cdigo para o nosso programa:
1 No painel de cdigo, d um clique duplo sobre o button1.
2 Ele vai diretamente para painel, sendo criado automaticamente o seguinte cdigo:
Private void button1_Click (object sender, System.EventArgse)
{
}
3 Tudo o que for digitado dentro deste cdigo ser executado assim que o button1 for clicado, quando o
programa estiver executando.
4 Digite o seguinte cdigo:
MessageBox.Show (Hello + textBox1.Text);
Ateno: este cdigo deve ser digitado exatamente como segue. Lembre-se de que o C# case-
sensitive. necessrio, tambm, o ponto-e-vrgula no final da linha.
5 Veja como vai ficar:
private void button1_Click (object sender, System.EventArgse)
{
MessageBox.Show (Hello + textBox1.Text);
}
6 Execute o programa. Para executar o programa, voc pode clicar em F5, ou, no menu Debug, clicar em
Start Debugging.
7 Automaticamente, o Visual Studio .NET salva o programa, compila e o executa.
8 - Digite seu nome e clique em OK.
9 Uma janela aparecer, exibindo a mensagem Hello + seu nome.
10 Clique em OK para fechar a janela com a mensagem.
11 Na janela executando o Form1, clique em Fechar.

Linguagem de Programao C#

39

3.4 Primeiro Programa
Escrevendo o tradicional programa Hello World, em C#:
Cdigo 1: Hello World em C#
using System ;
class Hello
{
public static void Main()
{
Console.WriteLine("Hello World!!!");
}
}

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

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


Linguagem de Programao C#

40

3.5 Estrutura de um programa
O esqueleto de um programa em C#, apresentando alguns dos seus elementos mais comuns:
Cdigo 2: Estrutura de um programa em C#
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;
Tipos: classes, estruturas, interfaces, delegaes, enums;
Membros: constantes, campos, mtodos, propriedades, indexadores, eventos, operadores,
construtores;
Outros: comentrios e instrues.
Linguagem de Programao C#

41

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

4.1 Tipos de dados
Como toda linguagem de programao o C# tambm apresenta seu grupo de tipos de dados
bsico. Esses tipos so conhecidos como tipos primitivos ou fundamentais por serem suportados
diretamente pelo compilador, e sero utilizados durante a codificao na definio de variveis,parmetros,
declaraes e at mesmo em comparaes.

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

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

Linguagem de Programao C#

42

Cdigo 3: Exemplo de converso automtica de tipos
int VarInteiro = 32450;
long VarLong = VarInteiro ;
float VarFloat = VarLong ;
double VarDouble = VarFloat ;
decimal VarDecimal = VarLong ;
byte VarByte = ( byte ) VarInteiro ;
int VarInteiro = (int) 31.245 F;
Tipos de converso automtica
Tipo Converte em
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long float, double, decimal
ulong long, double, decimal
char ushort, int, uint, long, ulong, float, double, decimal
float Double

4.1.3 O Objeto Convert
Em C# temos o objeto Convert que usado para converter um tipo de dado em outro. Os tipos de
dados suportados so: Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single,
Double, Decimal, DateTime e String.
Por exemplo:
Cdigo 4: Exemplo de utilizao do objeto Convert
double dNumber = 23.15;
int iNumber = System . Convert . ToInt32 ( dNumber );
bool bNumber = System . Convert . ToBoolean ( dNumber );
String strNumber = System . Convert . ToString ( dNumber );
char chrNumber = System . Convert . ToChar ( strNumber [0]) ;
4.2 Arrays
Um tipo array uma matriz de valores do mesmo tipo, que criada em tempo de execuo,
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 uso da
instruo new sempre deve ser utilizado, pois obrigatrio.
O tipo array pode ter diversas dimenses, o tamanho desta definido pelo desenvolvedor, mas
devemos saber que o primeiro ndice sempre zero.
No tipo array devemos sempre inicializar seus elementos, pois obrigatrio tambm. Veja abaixo a
forma de sintaxe para a declarao de arrays.

Linguagem de Programao C#

43

Cdigo 5: Sintaxe para a declarao de Arrays
<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
<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
<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
<TIPO> [ ] NomeDoArray = new <TIPO> [tamanho do array]
{
valores separados por ,
};
float [ ] ValorIndice = new float [5]{1.25 ,2 ,3.23 ,1.32 ,5};
string [,] ElementoVetor = new string [3 ,3]
{
{ " a b " , " a c " , " b c " } ,{"ab" , "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, especifique o nome do array sem usar colchetes
e para que um mtodo receba um array, a lista de parmetros deve especificar que um array ser
recebido. Veja o seguinte exemplo:
Cdigo 9: Passando Arrays mtodos
int [ ] vetor = {10 , 20, 30, 40, 50};
Array . IndexOf (vetor , 22) ;
public void ExibeVetor ( int [] vetor );
Algumas Propriedades e Mtodos dos Arrays:
Array.Length Tamanho do vetor;
Array.IndexOf(Array vetor, object value) Procura a primeira ocorrncia de valor em vetor;
Array.LastIndexOf(Array vetor, object value) Procura a ltima ocorrncia de valor em vetor;
Array.Sort(Array vetor) Ordena um vetor crescentemente;
Array.Reverse(Array vetor) Ordena um vetor decrescentemente.
Linguagem de Programao C#

44

CAPTULO 5 Operadores

C# uma linguagem muito rica em operadores. Estes representados por smbolos so utilizados na
construo de expresses. A sintaxe de expresso do C# baseada na sintaxe do C++. Os operadores
so categorizados em diversas funcionalidades. A tabela 3 apresenta essas divises.
Quando uma expresso possui mltiplas operaes, a precedncia dos operadores levada em
considerao na avaliao da mesma. Normalmente, as expresses so avaliadas da esquerda para
direita, exceto para operaes de atribuio e condicional, porm a precedncia pode ser alterada atravs
do uso do parnteses.
Tabela 3: Operadores do C#
Categoria Operadores
Aritmtica & + - * / %
Lgica (boolena e bitwise) & | ! && || true false
Concatenao de string +
Incremento e decremento ++
Shift << >>
Relacional == != <> <= >=
Atribuio = += -= *= /= %= &= = = <<= >>=
Acesso a membro .
Indexao [ ]
Indexao ()
Condicional ?:
Delegate (concatenao e remoo) + -
Delegate (concatenao e remoo) New
Informao de tipo is sizeof typeof
Controle de exceo de overflow checked unchecked
Indireo e endereo * - [ ] &

5.1 Operadores Aritmticos
Os operadores aritmticos so utilizados na maioria das expresses para execuo de clculos.
Numa expresso, eles podem produzir resultados fora da faixa de valores. Neste caso, uma
excesso como OverflowException gerada.
Os operadores unrios (atribudos a 1 atributo) + e - so utilizados para representar se o nmero
positivo ou negativo, respectivamente.
Cdigo 22: Operadores Unrios
x = +1000 // x = 1000
x = -1000 // x = -1000
Os operadores binrios +, -, *, / e % so utilizados nas expresses para execuo de clculos tais
como soma, subtrao, multiplicao, diviso e sobra. O operador binrio + quando utilizado entre strings
representam concatenao. No entanto, quando existem strings e nmeros na expresso e nenhuma
operao de cast for executada a operao tratado como concatenao. O operador binrio %
computado atravs da frmula dividendo - ( dividendo / divisor ) * divisor. Os exemplos abaixo ilustram
essas condies:
Cdigo 23: Operadores Binrios
string x = "Hello" + "World" // x = " HelloWorld "
string x = "Valor = " + 100 // x = " Valor = 100"
int x = 1000 % 11 // x = 10
Linguagem de Programao C#

45

O Cdigo abaixo utiliza os operadores aritmticos. Note a utilizao e recebimento de argumentos
atravs da linha de comando. O entry-point Main permite ser passado um vetor de strings como parmetro.
O mtodo Length conta o nmero de parmetros passado, ignorando o executvel. Como todo vetor o
primeiro parmetro representado pelo ndice zero, por exemplo args[0]. A varivel args no uma
palavra-chave, portanto, esta pode ser alterada:
Cdigo 24: Exemplo Operadores Binrios
using System ;
class Arithmetics
{
public static void Main ( string [ ] args )
{
// Verifica o nmero de argumentos entrados
if(args.Length == 3)
{
int x=0,y=0;
// Convertem os valores dos argumentos 2 e 3 para inteiro 32-
bit
// Se ocorrer algum erro o modo de utilizao
try
{
x = args [1]. ToInt32 ();
y = args [2]. ToInt32 ();
}
catch
{
usage ();
return ;
}
// Efetua a operao selecionada no primeiro argumento
switch ( args [0])
{
case " + " :
Console.Write("Valor da soma={0}", x+y);
break ;
case " - " :
Console.Write("Valor da subtrao={0}", x-y);
break ;
case " / " :
Console.Write("Valor da diviso={0}", x/y);
break ;
case " * " :
Console.Write("Valor da multiplicao={0}" ,x*y);
break ;
case " % " :
Console.Write("Valor da sobra={0}", x%y);
break ;
default :
usage ();
}
}
else
{
usage ();
}
}
public static void usage()
{
// Modo de utilizao
Console.WriteLine("Modo de usar : Arithmetics operador valor1 valor2");
Console.WriteLine("Ex.: Arithmetics + 100 200 " );
} }

Linguagem de Programao C#

46

5.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 prefixado, o valor adicionado ou subtrado
de um antes de sua utilizao.
Cdigo 25: Operadores de Incremento e Decremento
int x = 1000; // x = 1000
x++; // x = 1001
int y = x++; // x = 1002 , y = 1001
x --; // x = 1001
y = --x; // x = 1000 , y = 1000
++x; // x = 1001
--x; // x = 1000
y = ++x; // x = 1001 , y = 1001

5.3 Operadores Lgico, Relacional e Condicional
Esses operadores so utilizados em expresses onde o resultado retornado ou a caracterstica
booleana.
O operador de negao ! retorna o complemento de um valor booleano.
Cdigo 26: Exemplo do operador de negao
bool x = true ;
bool y = !x // y = false ;
if (!y) System.Console.Write("y verdadeiro");
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.
Por exemplo, a == b quer dizer se a for igual a b, isto totalmente vlido na expresso com tipos
primitivos(value types), tais como int, long, char, entre outros. Porm o comportamento dos operadores ==
e != so diferenciados quando utilizado entre structs (value types) e classes (reference types). Para structs
a comparao deve levar em considerao todos os campos da estrutura. Para classes a comparao
efetuada pelo endereo, ou referncia, da classe. O nico reference type que compara o valor e no a
referncia a string ou a classe System.String, pois os operadores == e != so sobrecarregados. A
sobrecarga pode alterar o comportamento padro dos operadores.

5.4 Operao de Atribuio
Estes operadores, divididos entre simples e compostos, so utilizados na designao de um valor
para uma varivel. O operador = representa a atribuio simples, ou seja uma varivel do lado esquerdo
recebe o contedo de um valor, de uma varivel ou do resultado de uma expresso do lado direito.
Cdigo 27: Exemplo do operador de atribuio
int x = 10;
int y = x;
int z = x + y;
Os operadores +=, -=, *=, /=, %=, &=, =, =, = e = representam a atribuio composta, que
normalmente atuam como um atalho na construo de uma expresso.
Cdigo 28: Exemplo do operador de atribuio composta
x = x + 10; // Pode ser escrito como :
x+= 10; // x <op >= <valor >
Linguagem de Programao C#

47

CAPTULO 6 Comandos
6.1 Seleo
Os comandos de seleo so utilizados na escolha de uma possibilidade entre uma ou mais
possveis. Os comandos if e switch fazem parte deste grupo.

6.1.1 Comando if
O comando if utiliza uma expresso, ou expresses, booleana para executar um comando ou um
bloco de comandos. A clusula else opcional na utilizao do if , no entanto, seu uso comum em
decises com duas ou mais opes.
Cdigo 10: Exemplo do comando if em C#
/*if com uma nica possibilidade.
Exibe a string " Verdadeiro " no Console caso a expresso (a== true ) seja
verdadeira*/

if(a== true )
{
System.Console.Write("Verdadeiro");
}

/* if com uma nica possibilidade. Exibe a string " Verdadeiro " no
Console caso a expresso (a== true ) seja verdadeira , seno exibe a string "
Falso"*/
if(a== true)
{
System.Console.Write("Verdadeiro");
}
else
{
System.Console.Write("Falso");
}
Toda expresso do comando if deve ser embutida em parnteses (()) e possui o conceito de curto-
circuito (short-circuit). Isto quer dizer que se uma expresso composta por And (&&), fornecer na sua
primeira anlise um valor booleano false (falso), as restantes no sero analisadas. Este conceito vlido
para todas expresses booleanas. Por exemplo:
Cdigo 11: Ifs com And e Or
// && (And ). Somente a primeira funo executada
if( MyFunc () && MyFunc2 ());

// || (Or). Ambas funes so executadas
if( MyFunc() || MyFunc2());

public static bool MyFunc()
{
return false ;
}

public static bool MyFunc2(){ return true ; }

Linguagem de Programao C#

48

Assim como outros comandos. O if tambm pode ser encontrado na forma aninhada.
Cdigo 12: Ifs aninhados
if(x == 1)
{
if(y == 100)
{
if(z == 1000)
{
System.Console.Write("OK");
}
}
}
Porm, devido a caracterstica de curto-circuito nas expresses, as linhas de cima podem e devem
ser reescritas para:
Cdigo 13: Curto-circuito
if(x == 1 && y == 100 && z == 1000) System.Console.Write("OK");
O comando if tambm pode ser encontrado num formato escada if-else-if , quando existem mais do
que duas possibilidades. Porm, na maioria destes casos, se as expresses no forem compostas ou
utilizarem de funes, a clusula switch substitui este tipo de construo.
Cdigo 14: Exemplo if-else-if
using System ;
class Ifs
{
public static void Main ()
{
char chOpt ;
Console.WriteLine(" 1 - Inserir " );
Console.WriteLine(" 2 - Atualizar");
Console.WriteLine(" 3 - Apagar");
Console.WriteLine(" 4 - Procurar");
Console.Write("Escolha entre[1] a [4] :");
do
{
chOpt = ( char ) Console.Read ();
} while (chOpt < '1' || chOpt > '4');

if( chOpt == '1' )
{
Console.WriteLine ( "Inserir...");
}
else if( chOpt == '2' )
{
Console.WriteLine ( " Atualizar...");
}
else if( chOpt == '3' )
{
Console.WriteLine ( " Apagar...");
}
else
{
Console.WriteLine("Procurar...");
}
}
}
Linguagem de Programao C#

49

O comando if com a clusula else nica pode ser encontrado em sua forma reduzida com operador
ternrio representado por interrogao (?:). chamado de operador ternrio por possuir 3 expresses: a
primeira refere-se a condio boolena, a segunda se a condio verdadeira e a terceira se a condio
falsa.
Cdigo 15: Operador Ternrio
int x;
if(f== true )
x = 100;
else
x = 1000;

// As linhas acima podem ser substitudas 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
constantes para execuo de um ou mais comandos. Os valor constante tratado atravs da clusula
case e este pode ser numrico, caracter ou string. A clusula default utilizada para qualquer caso no
interceptado pelo case. O exemplo abaixo implementa a verso com o comando switch do exemplo,
previamente mostrado com o comando if :
Cdigo 16: Comando switch
using System ;
class Switchs {
public static void Main (){
char chOpt ;
Console.WriteLine ( " 1 - Inserir" );
Console.WriteLine ( " 2 - Atualizar" );
Console.WriteLine ( " 3 - Apagar" );
Console.WriteLine ( " 4 - Procurar" );
Console.Write ("Escolha entre[1] a [4]:" );
// Verifica se os valores entrados esta entre 1 e 4
// caso contrrio pede reentrada
do
{
chOpt = ( char ) Console . Read ();
} while (chOpt < 1 || chOpt > 4 );
switch ( chOpt )
{
case 1 :
Console . WriteLine ( "Inserir...");
// InsertFunction ();
break ;
case 2 :
Console . WriteLine("Atualizar...");
// UpdateFunction ();
break ;
case 3 :
Console . WriteLine("Apagar...");
// DeleteFunction ();
break ;
default :
Console . WriteLine("Procurar...");
// FindFunction ();
} }
Uma ou mais clusulas case podem ser encontradas seguidamente quando mais do que uma
opo permitida para um comando ou bloco de comandos. O exemplo abaixo apresenta essa condio:
Linguagem de Programao C#

50

Cdigo 17: Comando switch
switch ( sProduct )
{
case "Windows2000":
case "WindowsNT":
System.Console.Write("Sistema Operacional");
break;
case " MSDE":
System.Console.Write("Mecanismo Simplificado");
goto case "SQL Server";
case "SQL Server":
System.Console.Write("Banco de Dados");
}
A clusula break , utilizada para separar os blocos do switch e garante que o bloco seja
executado somente at determinado ponto.

6.2 Loop
Conhecidos como lao ou loop, os comandos de iterao executam repetidamente um comando ou
bloco de comandos, a partir de uma determinada condio. Esta condio pode ser pr-definida ou com
final em aberto. Em C#, fazem parte dos comandos de iterao: while ,do , for e foreach .

6.2.1 Comando for
O comando for possui 3 declaraes opcionais, separadas por ponto e vrgula (;), dentro dos
parnteses: inicializao, condio e a iterao. Em cada parmetro, mais de uma expresso pode ser
encontrada separada por vrgula.
Cdigo 18: Iterao for
for(int x=0; x < 100; ++x)
{
System.Console.WriteLine(x);
}
for (;;)
{ // Lao infinito
System.Console.WriteLine("Hello,World!");
}
for(int y=100 , int x = 0;x < y; ++x, --y)
{ // Lao com mais de 1 varivel
System.Console.WriteLine(y);
}
Quando a clusula for processada pela primeira vez, se presente, a expresso ou expresses da
declarao inicializadora so executadas na ordem que elas esto escritas, este passo ocorre apenas uma
vez.
Linguagem de Programao C#

51

Se a declarao condicional estiver presente, ser avaliada, caso contrrio o for assume o valor
verdadeiro (true). Na avaliao, se o valor obtido for verdadeiro (true) o comando ou bloco de comandos
associados sero executados, ao seu final a terceira declarao ou declarao de iterao processada e,
ento, novamente a declarao condicional processada.
Este fluxo ocorre continuamente at que a declarao condicional seja avaliada como falsa (false)
ou o comando break seja encontrado, como visto anteriormente. O comando continue fora uma nova
iterao.
Cdigo 19: Iterao for (exemplo)
using System ;
class Fibonacci
{
public static void Main ()
{
int iVezes ;
Console.Write("Entre de 1 a 100 para o n de elementos a exibir
na sequncia de Fibonacci" );
// Verifica se os valores entrados esta entre 1 e 100
// caso contrrio pede reentrada
do
{
iVezes = Console.ReadLine().ToInt32();
} while (iVezes <1 || iVezes >100) ;

// Cria o vetor dinamicamente
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]);
Console.Write(" ");
}
}
}

Linguagem de Programao C#

52

6.2.2 Comando foreach
O comando foreach enumera os elementos de uma coleo. O cdigo abaixo implementa a
funcionalidade do exemplo anterior:
Cdigo 20: Iterao foreach (exemplo)
using System ;
class Fibonacci
{
public static void Main ()
{
int iVezes ;
Console.Write("Entre de 1 a 100 para o n de elementos a exibir na sequncia de
Fibonacci: " );
// Verifica se os valores entrados esta entre 1 e 100
// caso contrrio pede reentrada
do{
iVezes = Console . ReadLine (). ToInt32 ();
} while (iVezes <1 || iVezes >100) ;

// Cria o vetor dinamicamente
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 ( " " );
}
}
}

Linguagem de Programao C#

53

6.2.3 Comandos do - while
Os comandos do - while tm caractersticas 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 final do bloco.
Cdigo 21: Iterao do while (exemplo)
// 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);

Linguagem de Programao C#

54

CAPTULO 7 Desenvolvimento de aplicaes com C#

Abaixo a tela inicial do Visual Studio:


Para construir um programa vamos seguir 3 passos:

1 Passo: Criar um Projeto Fique atento neste passo, pois o Visual Studio permite que voc
escolha entre 4 linguagens (Visual Basic, Visual C#, C++, J#). Escolha sempre o VISUAL C#



Linguagem de Programao C#

55

Esta a Tela de Escolha de Projetos, fique atento pois o Visual Studio permite que voc programe
em 4 linguagens diferentes (Visual Basic, Visual C#, C++ e J#). Voc deve escolher VISUAL C#.


Fique atento a esta aba, verifique se tem o texto Form1.cs, caso no tenha feche o programa e
refaa o 1 Passo



Antes de prosseguirmos para o 2 Passo, devemos conhecer com mais detalhes as janelas do
Visual Studio.

Linguagem de Programao C#

56

TOOLBOX: Esta caixa de dilogo muito importante pois nela que iremos escolher e pegar os
objetos que usaremos no nosso programa. Ela dividida por grupos de objetos que so separados por tipo.
Neste primeiro momento usaremos somente os objetos do COMMOM CONTROLS.



SOLUTION EXPLORER: Esta caixa de dilogo usada para gerenciar os arquivos que foram
criados no nosso projeto.


CLASS VIEW: Esta caixa de dilogo usada para gerenciar as classes criadas no nosso projeto.


Linguagem de Programao C#

57

PROPERTIES: Esta caixa de dilogo outra muito importante pois nela que configuraremos os
objetos adicionados no nosso programa.



Ela dividida em 2 partes: Properties e Events, para selecion-los basta clicar em:

Para exibir as propriedades do objeto selecionado

Para exibir os eventos do objeto selecionado

Este campo informa o objeto selecionado





Linguagem de Programao C#

58

Esta a tela do nosso programa, conhecida como FORM ou FORMULRIO






Linguagem de Programao C#

59

2 Passo: Construir a tela do programa. Este passo requer somente criatividade.



Todos objetos adicionados ao FORM devero ter alteradas as propriedades NAME e TEXT. A
propriedade NAME serve para identificar o objeto em nvel do programador (VARIVEL).
A propriedade TEXT serve para identificar o objeto em nvel do usurio (RTULO).



Nesta propriedade podemos usar acentos, caracteres especiais e espao em branco. Altere a
propriedade para o texto: Clique Aqui!!!



Nesta propriedade NO podemos usar acentos, caracteres especiais e espao em branco. Altere a
propriedade para o texto: btnClique



Linguagem de Programao C#

60

Existe uma Regra de Nomenclatura: Remover as vogais e adicionar a funcionalidade do objeto.

Exemplos:

Button1 => btnSair Label1 => lblNome

TextBox1 => txtEndereco
TextBox1 => txtEndereco

3 Passo: Codificar o programa. Este passo o mais importante, pois nele que iremos fazer
nosso programa funcionar, isto , sem ele teremos o projeto correto com uma tela bonita mas SEM
FUNCIONAMENTO.
Exemplo1: Faa um programa que escreva a frase hello world na tela quando um boto for clicado.

1 Passo: Criar um projeto



2 Passo: Construir a tela do programa


Linguagem de Programao C#

61

Para que o FORM fique assim deve-se alterar algumas propriedades dos trs objetos: FORM,
BUTTON e LABEL.
Tome cuidado para no alterar a propriedade do objeto errado. CLIQUE 1 VEZ NO OBJETO, PARA
SELECION-LO, E DEPOIS ALTERE AS PROPRIEDADES.



As propriedades NAME e TEXT sempre sero alteradas. Existem outras propriedades que tambm
so interessantes, teste as seguintes propriedades:
BACKCOLOR usada para alterar a cor de fundo
FONT usada para alterar a fonte (estilo, tamanho, entre outros)
FORECOLOR usada para alterar a cor da fonte

3 Passo: Codificar o programa



Linguagem de Programao C#

62



Analisando as ABAS acima verificamos que agora temos o cdigo fonte separado da tela, para
acessar a tela (FORM) clique na ABA Form1.cs [Design] e para acessar o cdigo fonte clique na ABA
Form1.cs



Para diferenciar as duas telas verifique se existe o cadeado azul na frente das ABAS, caso exista
feche a tela do programa que est executando antes de alterar qualquer coisa.


Linguagem de Programao C#

63



Concluso: Neste exemplo aprendemos a usar dois objetos (LABEL e BUTTON) e um evento
(CLICK).
LABEL usado para escrever mensagens na tela
BUTTON usado para executar a funcionalidade do programa. Para isto acionamos o evento
CLICK, que executa o cdigo atravs do click do mouse no objeto.
EXEMPLO 2: Faa um programa que escreva a frase bom dia, seu nome na tela quando um boto
for clicado
1 Passo: Criar um projeto



Linguagem de Programao C#

64

2 Passo: Construir a tela do programa

Para que o FORM fique assim deve-se alterar algumas propriedades dos trs objetos: FORM,
BUTTON, LABEL e TEXTBOX.

Tome cuidado para no alterar a propriedade do objeto errado. CLIQUE 1 VEZ NO OBJETO, PARA
SELECION-LO, E DEPOIS ALTERE AS PROPRIEDADES.
As propriedades NAME e TEXT sempre sero alteradas.
Existem outras propriedades que tambm so interessantes, teste as seguintes propriedades:
BACKCOLOR usada para alterar a cor de fundo
FONT usada para alterar a fonte (estilo, tamanho, entre outros)
FORECOLOR usada para alterar a cor da fonte

Linguagem de Programao C#

65

3 Passo: Codificar o programa




Agora teste este cdigo:

Qual a diferena entre os cdigos?
Linguagem de Programao C#

66

A diferena que no primeiro no usamos varivel e no segundo usamos a varivel nome do tipo
STRING (texto) para armazenar as informaes digitadas pelo usurio.
Funciona sem varivel?
Sim, pois a propriedade TEXT armazena automaticamente as informaes digitadas. Lembre-se
que ela armazena somente Texto (STRING)

Concluso: Neste exemplo aprendemos a usar um objeto novo (TEXTBOX) e varivel.
TEXTBOX usado para capturar as informaes digitadas pelo usurio. Estas informaes sero .
SEMPRE no formato de texto (STRING). Quando precisarmos de valores numricos (INT ou DOUBLE)
teremos que converter.
VARIVEL Varivel o nome dado a uma posio de memria onde podemos armazenar um tipo de
dado definido. Os tipos so:
int dados do tipo inteiro
double dados do tipo real
String ou string dados do tipo texto

Exerccios
1) Faa um programa em C# para calcular a rea de um retngulo. O usurio dever fornecer os
valores da Base e da Altura e o programa dever responder o valor da rea calculado, conforme a tela:


Linguagem de Programao C#

67

2) Faa um programa em C# que calcule quantas horas uma pessoa j viveu. O usurio dever
informar sua idade em anos e o programa dever responder a idade da pessoa em horas, conforme a tela
abaixo:

Sabe-se: dia = 24h Ano = 365 dias
A resposta deve seguir o exemplo: Pedro j viveu 1.245.000 horas
3) Faa um programa em C# que calcule o salrio de um funcionrio horista, isto , que recebe por
horas trabalhadas. O usurio dever fornecer o seu nome, o nmero de horas trabalhadas e o valor que
ele recebe por cada hora trabalhada e o programa dever responder o seu salrio final, conforme a tela
abaixo:

4) Faa um programa em C# que calcule o salrio de um vendedor. O usurio dever fornecer o
seu nome, o seu salrio mensal e o total de vendas do ms e o programa dever responder o salrio
mensal deste vendedor, conforme a tela abaixo:

Sabe-se que: o percentual ganho sobre o total de vendas de 15%
sal_final = salrio + (15% do total de vendas)
A resposta deve seguir o exemplo abaixo: O salrio da Paola 3500,00
Linguagem de Programao C#

68

5) Faa um programa em C# que converte um valor em reais para seu equivalente em dlares. O
usurio dever fornecer o preo do produto em dlar e o programa dever responder o preo do produto
em reais, conforme a tela abaixo:

Use como preo do dlar o valor de R$1,89.
6) Faa um programa em C# que converta uma temperatura em Farenheit para Celsius. O usurio
dever fornecer uma temperatura em graus Farenheit e o programa dever responder o seu equivalente
em graus Celsius, conforme a tela abaixo:

+ Use a formula:

6) Faa um programa em C# que calcule a equao do 2 grau (ax2+bx+c), atravs da frmula de
Baskara. O usurio dever fornecer os valores de A, B, C e o programa dever responder as duas
respostas X1 e X2, conforme a tela abaixo:


) 32 (
9
5
= F C
Linguagem de Programao C#

69

EXEMPLO 1: Faa um programa que leia um nmero qualquer e verifique se este nmero est entre 10 e
20.
1 Passo: Criar um projeto

2 Passo: Construir a tela do programa

Para que o FORM fique assim deve-se alterar algumas propriedades dos trs objetos: FORM,
BUTTON, LABEL e TEXTBOX.
Linguagem de Programao C#

70



3 Passo: Codificar o programa


Linguagem de Programao C#

71

Agora teste este cdigo. Nele usamos o comando MessageBox.Show(); para exibir a resposta ao
invs do lblResposta.Text.


Exerccios
1) Faa um programa que escreva por extenso o nome do ms escolhido pelo usurio, conforme o
modelo abaixo:
Boto Conversor: Dever transformar o nmero do ms digitado no textbox1 para seu nome por
extenso, mostrando no label3.
Boto Sair: Dever sair do programa.

2) Faa um programa que coloque na ordem crescente dois nmeros reais digitados pelo usurio,
conforme o modelo abaixo:
Boto Processar: Dever colocar na ordem crescente dois nmeros digitados pelo usurio e
mostr-los nos Label3 e Label4.

Linguagem de Programao C#

72

3) Faa um programa que verifique se um determinado nmero, digitado pelo usurio, par ou
mpar, conforme o modelo abaixo:
Boto Par ou mpar: Dever verificar se o nmero par ou mpar, exibindo a resposta em uma
caixa de mensagem => MessageBox.Show();

Para descobrir o resto da diviso use o operador %. Exemplo: N1 % 2
4) Faa um programa que permita ao usurio escrever seu nome e escolher uma cor entre Azul e
Rosa, conforme o modelo abaixo:
Os quadrados decorativos foram feitos com o GROUPBOX. Para ficar fechado s apagar a
propriedade TEXT e para ficar com o texto ESCOLHA UMA COR, escrever a mensagem na propriedade
TEXT.
As opes Azul e Rosa foram feitas com o RADIOBUTTON, propriedade TEXT para os textos. O
radiobutton possui uma propriedade chamada CHECKED que armazena TRUE (selecionado) ou FALSE
(no selecionado). Use o evento CLICK do radiobutton.
O programa dever funcionar da seguinte maneira: o usurio ir escrever o seu nome e escolher
uma cor, o programa dever responder alterando a cor do form, para a cor escolhida, e exibindo no Label2
a mensagem: Nome_do_usurio, voc gosta da cor cor_escolhida
.
5) Faa um programa que calcule o peso ideal de uma pessoa, conforme a tela abaixo.
Lembre-se: RADIOBUTTON Evento CLICK ao de clicar no RadioButton
O programa dever calcular o peso ideal de uma pessoa usando a altura digitada pelo usurio e a
opo do sexo escolhida, exibindo o peso ideal no Label3. Use as frmulas abaixo:
- para homens: (72.7*h)-58 - para mulheres: (62.1*h)-44.7

Linguagem de Programao C#

73

6) Desenvolva um programa em C# que determine o gasto em reais do consumo mensal de energia
eltrica de uma residncia. O programa dever ler o nome do proprietrio, a quantidade de Kwh
consumidos no ms para cada residncia e o valor unitrio do Kwh em reais (R$) e dever determinar e
exibir o gasto em reais (R$) de uma residncia, conforme tabela abaixo:
Tipo de Consumidor Consumo Acrscimo no Valor Unitrio
Consumidor Normal At 150 Kwh Valor normal
Consumidor Extra faixa 1 151 Kwh at 250 Kwh 3% de acrscimo
Consumidor Extra faixa 2 Acima de 250 Kwh 5% de acrscimo

Verificar se o TextBox do Consumo e do Valor Unit esto vazio
Clculo do Gasto em Reais verificando o Tipo de Consumidor e exibir resposta.
Exemplo da resposta: A residncia do Sr. Paulo gastou R$ 270,00. Ele Consumidor Extra faixa1

7) Desenvolva um programa em C# que determine o gasto semanal de uma pessoa em uma Lan
House. O programa dever ler o nome da pessoa, o nmero de horas usadas (de computador) na ltima
semana e o valor cobrado por hora, em reais. O programa dever determinar e exibir o gasto em reais da
pessoa conforme tabela abaixo:
Horas Usadas Valor cobrado por Hora
at 20 h por semana Valor normal
Para as horas que ultrapassarem 20 h Valor normal com 50% de desconto

Verificar se o TextBox das Horas Usadas e do Valor R$ esto vazio. Clculo do Gasto Semanal
e exibir resposta.
Exemplo da resposta: O Sr. Joo usou 12 horas e deve pagar R$ 12,00

Linguagem de Programao C#

74

8) Faa um programa em C# que l o nome, o salrio fixo de um vendedor, o total de vendas por
ele efetuadas no ms e calcule o valor do salrio final, isto , salrio fixo mais a porcentagem sobre as
vendas e mais o prmio, conforme a seguinte tabela:
Total de vendas no ms Porcentagem sobre Vendas Prmio
At R$ 5000 2% 100
De R$ 5001 at R$ 7500 3% 200
Acima de R$ 7500 4% 300

Verificar se o TextBox do Salrio Fixo e do Total de Vendas esto vazio
Clculo do Salrio Final (salrio fixo + porcentagem sobre as vendas + premio) e exibir resposta.
Exemplo da resposta: O Sr. Paulo vendeu R$ 5700,00. Salrio Final R$ 571,00

9) Um banco conceder um crdito especial aos seus clientes, varivel de acordo com o saldo
mdio no ltimo ano. Faa um programa em C# que leia o nome do cliente, o saldo mdio deste cliente e
calcule o valor do crdito de acordo com a tabela abaixo.
Saldo mdio Percentual
At R$ 200 nenhum crdito
de R$ 201 a R$ 400 20% do valor do saldo mdio
de R$ 401 a R$ 600 30% do valor do saldo mdio
acima de R$ 601 40% do valor do saldo mdio

Verificar se o TextBox do Saldo Mdio est vazio. Clculo do Crdito e exibir resposta.
Exemplo da resposta: O Sr. Joo tem 20% de crdito e receber R$ 80,00

Linguagem de Programao C#

75

CAPTULO 8 Converso de Tipos com C#
8.1 Problema na Converso de Tipos
A converso de tipos numricos possui dois problemas que acontecem em tempo de execuo,
so eles:
Converso de valores NULOS para valores numricos (quando o usurio deixa um TextBox vazio)
Converso de valores alfanumricos (letras) para valores numricos (quando o usurio preenche o
TextBox com letras)

EXEMPLO 1: Faa um programa que leia somente letras no textbox do nome e somente nmeros
no textbox do salrio e calcule o novo salrio (40% de reajuste)
1 Passo: Criar um projeto



Linguagem de Programao C#

76

Para travarmos as letras ou os nmeros de um TextBox precisamos usar o evento KEYPRESS.
Este evento responsvel pela captura de cada tecla pressionada no TextBox.

Selecione o TextBox do Nome (txtNome), acione o evento KeyPress e digite o cdigo:

Este cdigo responsvel pela verificao letra a letra (digitada) no TextBox. Caso esta letra esteja
entre as letras minsculas/maisculas ele libera a exibio da mesma (e.Handled=false), caso contrrio ele
apaga a letra digitada (e.Handled=true).
Observe que o cdigo digitado anteriormente libera somente as letras (minsculas/maisculas),
concluso no conseguimos usar o Backspace para apagar um texto digitado errado. Para corrigir o erro
usaremos a tabela ASCII, neste caso o cdigo do Backspace o nmero 8.
Linguagem de Programao C#

77


Agora usaremos os mesmos passos para o TextBox do Salrio (txtSalario).

Selecione o TextBox do Salrio (txtSalario), acione o evento KeyPress e digite o cdigo:
Linguagem de Programao C#

78


Agora vamos efetuar o clculo do novo salrio, lembrando que talvez o usurio pode deixar de
preencher o textbox e clicar em Calcular.


Linguagem de Programao C#

79

Acione o evento CLICK do btnCalcular e escreva o cdigo:

Concluso: Para corrigirmos o erro converso quando um textbox est vazio devemos fazer um if
antes da converso numrica, isto , a converso s pode acontecer caso o textbox tenha sido
preenchido.
EXEMPLO 2: Faa um programa que leia somente letras no textbox do nome e somente nmeros
no textbox do salrio e calcule o novo salrio (40% de reajuste)
1 Passo: Criar um projeto


Linguagem de Programao C#

80




Linguagem de Programao C#

81




Linguagem de Programao C#

82





Linguagem de Programao C#

83



Selecione o frmTelaSalario (No Solution Explorer)
Para travarmos as letras ou os nmeros de um TextBox precisamos usar o evento KEYPRESS.
Este evento responsvel pela captura de cada tecla pressionada no TextBox.
Linguagem de Programao C#

84


Selecione o TextBox do Nome (txtNome), acione o evento KeyPress e digite o cdigo:

Este cdigo responsvel pela verificao letra a letra (digitada) no TextBox. Caso esta letra esteja
entre as letras minsculas/maisculas ele libera a exibio da mesma (e.Handled=false), caso contrrio ele
apaga a letra digitada (e.Handled=true).
Observe que o cdigo digitado anteriormente libera somente as letras (minsculas/maisculas),
concluso no conseguimos usar o Backspace para apagar um texto digitado errado. Para corrigir o erro
usaremos a tabela ASCII, neste caso o cdigo do Backspace o nmero 8.
Linguagem de Programao C#

85


Agora usaremos os mesmos passos para o TextBox do Salrio (txtSalario).

Selecione o TextBox do Salrio (txtSalario), acione o evento KeyPress e digite o cdigo:
Linguagem de Programao C#

86


Agora vamos efetuar o clculo do novo salrio, lembrando que talvez o usurio pode deixar de
preencher o textbox e clicar em Calcular.



Linguagem de Programao C#

87

Acione o evento CLICK do btnCalcular e escreva o cdigo:


Concluso: Para corrigirmos o erro converso quando um textbox est vazio devemos fazer um if
antes da converso numrica, isto , a converso s pode acontecer caso o textbox tenha sido
preenchido.
Observao: Acima aprendemos a corrigir o problema de TEXTBOX vazio, mas no podemos
esquecer que nosso usurio poder digitar um valor alfanumrico (LETRAS) no TEXTBOX e isto ir
acarretar um erro de converso, pois letras no podem virar nmeros, para este problemas usamos o
evento KeyPress e limitamos os caracteres em cada TEXTBOX.
Ser que no existe uma outra maneira de corrigirmos os dois erros ao mesmo tempo, sem usar o
evento KeyPress dos TEXTBOX? Sim, existe estas soluo ser explicada agora.


Linguagem de Programao C#

88



Concluso: Qual seria a diferena efetiva entre os dois cdigos? J que os dois resolvem nossos
problemas. Na realidade os dois cdigos podem ser usados sem trazer perdas para seu programa.
A diferena est mesmo entre os comandos IF e o comando TRY, analisando o comando TRY
verificamos que ele funciona como se fosse um if, mas ele trata erros de execuo, isto , caso ocorra
algum problema quando o programa est sendo em uso.

Exerccios
1) Faa um programa em C# que possua as Telas abaixo:
a) Tela Principal:


MainMenu, funcionando, isto , abrindo a Tela de
Clientes (somente 1 vez) e fechando o programa quando
selecionar Sair.
Linguagem de Programao C#

89

b) Tela Clientes:

- Trocar o nome de todos os objetos da Tela.
- O Boto Sair deve fechar esta tela e voltar para a
tela anterior.
- A tela deve comear com os TextBoxs dos
dependentes bloqueados.
- Quando for selecionado o checkBox 1 deve ser
habilitado o textBox do Dependente 1.
- Quando for selecionado o checkBox 2 deve ser
habilitado o textBox do Dependente 1 e do
Dependente 2.
- Quando for selecionado o checkBox Nenhum deve-se manter todos os textBoxs desabilitados.
- Quando for selecionado um chechBox os outros devero ser bloqueados
- O boto cadastrar deve somar e exibir a quantidade clientes cadastrados, limpar as selees,
desbloquear os checkBoxs e bloquear os TextBoxs dos dependentes.

c) Tela Filmes:
- Trocar o nome de todos os objetos da
Tela.
- O Boto Sair deve fechar esta tela e
voltar para a tela anterior.
- A tela deve comear com os TextBoxs
dos nomes dos filmes bloqueados.
- Quando for selecionado o checkBox
DVD deve ser habilitado o textBox do
Nome do Filme em DVD e somar a
quantidade de filme em DVD.
- Quando for selecionado o checkBox
VHS deve ser habilitado o textBox do
Nome do Filme em VHS e somar a
quantidade de filme em VHS.
- Quando for selecionado um chechBox
o outro dever ser bloqueado.
- O boto cadastrar deve exibir a quantidade filmes cadastrados por tipo DVD e VHS, limpar as selees,
desbloquear os checkBoxs e bloquear os TextBoxs dos nomes dos filmes.

2) Faa um programa em C# que possua as Telas abaixo:
a) Tela Principal:

MainMenu, funcionando, isto , abrindo a Tela de
Fornecedores (somente 1 vez) e fechando o programa
quando selecionar Sair.

Linguagem de Programao C#

90

b) Tela Clientes:

- Trocar o nome de todos os objetos da Tela.
- O Boto Sair deve fechar esta tela e voltar para a tela
anterior.
- A tela deve comear com os 3 CheckBoxs bloqueados.
- Quando for selecionado o radioButton SP deve ser
habilitado o checkBox Alimentcia.
- Quando for selecionado o radioButton RG deve ser
habilitado os checkBoxs Higiene Pessoal e Vesturio.
- Quando o checkBox Alimentcia for selecionado deve-se
somar fornecedores para SP.
- Quando o checkBox Higiene Pessoal e/ou Vesturio for
selecionado deve-se somar fornecedores para RG.
- O boto cadastrar deve exibir a quantidade de
fornecedores por estado SP e RG, limpar as selees e
bloquear dos 3 CheckBoxs.




b) Tela Vendas:

- Trocar o nome de todos os
objetos da Tela.
- O Boto Sair deve fechar esta
tela e voltar para a tela anterior.
- A tela deve comear com os 3
CheckBoxs bloqueados.
- Quando for selecionado o
radioButton vista deve ser
habilitado os checkBoxs Banana e
Uva.
- Quando for selecionado o
radioButton Carto deve ser
habilitado o checkBox Maa.
- Quando o checkBox de cada produto for selecionado deve-se somar a quantidade de cada produto
vendido.
- O boto cadastrar deve exibir a quantidade de produtos vendidos, limpar as selees e bloquear dos 3
CheckBoxs.


Linguagem de Programao C#

91

3) Desenvolva um programa em C# que cadastre candidatos na empresa de RH ABCD
Carreiras. O programa dever ter a tela abaixo:













a. Preencher o ComboBox da Funo com os valores PROFESSOR, COORDENADOR, AUXILIAR.
b. Preencher o ComboBox do Estado Civil com os valores CASADO, SOLTEIRO, VIVO.
c. O Boto Limpar deve limpar todos os textboxs, comboboxs e variveis indicando um novo cadastro.
d. Quando selecionar uma funo preencher automaticamente o salrio conforme a tabela abaixo:
Funo Salrio
Professor 1500,00
Coordenador 3000,00
Auxiliar 850,00
e. Trocar a propriedade NAME de todos os objetos.
f. O boto Cadastrar Candidatos deve cadastrar os candidatos no textbox seguindo o padro:
ABCD Carreiras
Jos Feliciano 22 anos
Sexo: Masculino Casado
Cargo Pretendido: Professor R$ 1500,00
Gabriela Silva 18 anos
Sexo: Feminino Solteira
Cargo Pretendido: Auxiliar R$ 850,00
Total de Candidatos: 2


Linguagem de Programao C#

92

CAPTULO 9 Programao baseada em Objetos

9.1 Convenes e Padres de Nomenclatura
As convenes e padres de nomenclatura auxiliam o desenvolvedor na organizao, localizao e
manuteno de seus Cdigos. Imagine como seria encontrar a seguinte codificao:
Cdigo 29: Exemplo de codificao sem qualquer padro de nomenclatura
using System ;
class classeparacadastrodeclientes
{
private int j;
private int n;
private string str;
public adicionarcliente ( string s)
{
}
}
Observe a diferena, se utilizarmos algumas regras de nomenclatura:
Cdigo 30: Exemplo de codificao com padro de nomenclatura
using System ;
class ClasseCadastrodeClientes
{
private int numFilhos ;
private int numBens ;
private string nomeCompleto ;
public adicionarCliente ( string cliente )
{

}
}

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

Linguagem de Programao C#

93

9.1.1 Nomeao de variveis
Recomendao da Microsoft para nomeao de variveis:
Evite usar underline ;
No crie variveis com o mesmo nome mudando somente entre maisculas e minsculas;
Utilize nomes de variveis com minsculas;
Evite utilizar todas as letras maisculas (normalmente utilizado para definir constantes);
Notao camelCasing.
9.1.2 Nomeao de classes, mtodos, propriedades, entre outros.
Recomendaes para nomeao de classes, mtodos, propriedades, enumeradores, interfaces,
constantes, campos somente leitura e namespace: Notao PascalCasting.

9.2 Classes
Uma classe um poderoso tipo de dado em C#. Como estrutura, uma classe define os dados e o
comportamento dos tipos de dados.
Uma classe em C# tem a seguinte estrutura:
Cdigo 31: Exemplo de Classe em C#
class NomeDaClasse
{
// Definio dos atributos
private int atrib1 ;
private string atrib2 ;

// Mtodo construtor
public NomeDaClasse (int param1 , string param2 )
{
atrib1 = param1;
atrib2 = param2;
}

// Definio dos mtodos
public tipoRetorno MetodoUm ([ lista de parmetros ])
{
return [ valor ];
}
}

Os atributos definem atravs de tipos de dados as caractersticas que um objeto venha a
apresentar. Em uma classe Carro, por exemplo, poderamos afirmar que cor, peso e modelo seriam seus
atributos.
O mtodo construtor sempre chamado quando se cria um novo objeto, ele pode ou no conter
uma assinatura.
Os outros mtodos definem atravs de rotinas as aes que um objeto venha a apresentar, No
exemplo citado acima, uma classe Carro poderia conter os mtodos: acelerar, frear e ligar.

Linguagem de Programao C#

94

9.3 Propriedades
As propriedades so recursos fornecidos pelas classes para que seja possvel alterar seus valores.
Os recursos get e set comuns s propriedades.
Veja como possvel se definir esses recursos:
Cdigo 32: Exemplo de Propriedades em C#
public tipodedado NomeDaPropriedade
{
get
{
return nomeAtributo ;
}
set
{
nomeAtributo = value ;
}
}

// Utiliza -se da seguinte maneira
this . NomeDaPropriedade = valor ;
valor = this . NomeDaPropriedade ;

9.4 Modificadores de visibilidade
C# apresenta os seguintes modificadores de visibilidades:
1. private: Significa que, exceto a classe includa, nada pode acessar o objeto, mtodo ou varivel;
2. public: Significa que todos tm acesso livre a este membro;
3. protected: Significa que so apenas visveis para as classes derivadas por meio de herana;
4. internal: todos tm acesso livre a este membro dentro de um assembly (DLL ou EXE;
correspondente ao JAR do Java). Fora do assembly a classe inacessvel.
Atributos internal, so utilizados geralmente para a criao de bibliotecas, j que uma biblioteca
pode ter vrios namespaces.
O exemplo a seguir mostra como devemos dispor os modificadores de visibilidade:
Cdigo 33: Exemplo de utilizao dos modificadores de visibilidade C#
class NomeDaClasse
{
private int atrib1 ;
public int atrib2 ;
protected int atrib3 ;
internal int atrib4 ;
...
}

Linguagem de Programao C#

95

9.5 Herana
A herana um recurso utilizado para derivar classes que tm mtodos ou atributos em comum.
Sua principal vantagem o reaproveitamento de Cdigo.
Para ilustrar a utilizao do recurso de herana, imagine a seguinte situao:
Em um determinado programa, deve-se implementar as seguintes classes: Fornecedor(id, cpf, rua,
numero, bairro, telefone, email, gerente) e Cliente(id, cpf, rua, numero, bairro, telefone, email,
limiteDeCompras). O programa deve cadastrar essas informaes, bem como consulta-las e imprimi-las.
Se o programador optar por utilizar herana, os atributos e mtodos em comum:
Atributos:
rua;
nmero;
bairro;
telefone;
email.
Mtodos:
cadastrar();
consultar();
imprimir().
Poderiam ser escritos em uma Pai chamada Pessoa que derivaria as duas classes filhas
Fornecedor e Cliente.
Em C# todas as classes derivam da classe Object. Sua declarao deve acontecer da seguinte
maneira:
Cdigo 34: Exemplo de declarao de herana em C#
class NomeDaClasse : ClasseBase
{
...
}

9.5.1 This e Base
As clusulas this e base so referncias que indicam a prpria classe e a classe base,
respectivamente.
Entende-se como classe base, a classe cuja a classe atual herda as propriedades e atributos. Sua
notao pode ser observada no seguinte exemplo:
Cdigo 35: Exemplo de this e base em C#
this.nomeAtributo = valor ;
valor = this.nomeAtributo ;
this.NomeMetodo ();
base.nomeAtributoClasseBase = valor ;
valor = base.nomeAtributoClasseBase ;
base.NomeMetodoClasseBase ();
Linguagem de Programao C#

96

9.6 Declarao e Chamada de Mtodos e Objetos
Para se instanciar um objeto deve-se utilizar a operao new. Essa operao atribui um <objeto>
montado dentro de uma varivel do tipo <objeto>.
Utiliza-se a seguinte notao:
Cdigo 36: Exemplo instanciao de objeto em C#
MinhaClasse obj = new MinhaClasse ();
Para acessar seus atributos e mtodos utilizamos a instruo ., como pode ser observado no
exemplo a seguir:
Cdigo 37: Exemplo acesso a atributos e mtodos em C#
obj. nomeMetodo ();
obj. nomeAtributo = 23;
obj. NomePropriedade = " Apenas um teste" ;
Entretanto como j foi explanado, atributos com modificador de acesso do tipo private no
possibilitam o acesso direto, para isso devemos utilizar as propriedades explanadas na sesso 8.3.

9.7 Mtodos e Atributos Static
A operao static define um mtodo ou atributo como pertencentes classe em questo e no aos
objetos, assim sendo esses atributos ou mtodos tero apenas 1 cpia para n objetos que gerarem.
Sua declarao feita com a palavra static depois do modificador de acesso (public, private) 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
do objeto.
Veja no exemplo:
Cdigo 38: Exemplo acesso a atributos e mtodos estticos em C#
NomeDaClasse . atributoEstatico = valor ;
valor = NomeDaClasse . atributoEstatico ;
NomeDaClasse . MetodoEstatico ();

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

97

9.9 Classes e Mtodos Abstratos
A classe abstrata um tipo de classe que somente pode ser herdada e no instanciada, de certa
forma pode se dizer que este tipo de classe uma classe conceitual que pode definir funcionalidades para
que as suas subclasses (classes que herdam desta classe) possam implementa-las de forma no
obrigatria, ou seja ao se definir um conjunto de mtodos na classe abstrata no de total obrigatoriedade
a implementao de todos os mtodos em suas subclasses, em uma classe abstrata os mtodos
declarados podem ser abstratos ou no, e suas implementaes devem ser obrigatrias na subclasse ou
no, quando criamos um mtodo abstrato em uma classe abstrata sua implementao obrigatria, caso
voc no implemente o mesmo o compilador criar um erro em tempo de compilao.
O mesmo se tm com mtodos abstratos, no se pode herda-los.
Exemplo de implementao de uma classe abstrata em C#
abstract class formaClasse
{
abstract public int Area ();
}
class quadrado : formaClasse
{
int x, y;
// Se no for implementado o mtodo Area ()
// ser gerado um compile - time error .
// Utiliza -se o operador override para indicar a sobrescrita .
public override int Area ()
{
return x * y;
}
}

9.10 Interfaces
As interfaces so fundamentais em um sistema orientado a objetos, quando dizemos que um objeto
a instancia de uma classe, na verdade queremos dizer, que este objeto implementa a interface definida
pela classe, ou seja uma interface define as operaes que um objeto ser obrigado a implementar. Para
cada operao declarada por um objeto deve ser especificado o nome da operao, os objetos que esta
operao aceita como parmetro e o tipo de valor retornado pela operao; este conjunto de informaes
sobre uma determinada operao tem o nome de assinatura da operao, e um conjunto de assinaturas
de operaes d-se o nome de interface.
importante lembrar que uma interface nunca contm implementao, ou seja numa interface no
se pode definir campos, pois o mesmo uma implementao de um atributo objeto, a interface tambm
no permite construtores pois num construtor temos as instrues usadas para 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.

Linguagem de Programao C#

98

Exemplo de implementao de uma interface em C#
interface IExemploInterface
{
void ExemploMetodo ();
}
class ImplementacaoClasse : IExemploInterface
{
// Implementao explicita da interface
void IExemploInterface . ExemploMetodo ()
{
// Implementao do mtodo
}
static void Main ()
{
// Declarando uma instancia de uma interface
IExemploInterface obj = new ImplementacaoClasse ();
// chama o mtodo.
obj. ExemploMetodo ();
}
}

Note que, para se sobrescrever um mtodo da interface utilizamos <Interface>.<Mtodo>.
A declarao de uma instncia de uma interface feita de forma diferente da declarao de um
objeto normal, aqui temos: Interface <var> = new <ClasseQueImplementaAInterface>();

9.11 Mtodos Virtuais
Quando queremos possibilitar a algum mtodo que ele seja sobrescrito, utilizamos o operador
virtual. Os mtodos virtuais podem possuir corpo.
Caso um mtodo no seja declarado como virtual ou abstract no ser possvel a sua sobrescrita.

9.12 Classes e Mtodos sealed - Finais
Uma classe selada utilizada para restringir caractersticas da Herana do objeto, quando uma
classe definida como sealed , est classe no poder ser herdada, caso voc tente o compilador criara
um erro em tempo de compilao, aps criar uma classe selada pode se observar que o intelisense
(famoso ctrl + espao) no mostra o nome da classe definida como sealed quando voc tenta criar uma
Herana para novas classes.
Os mtodos declarados como sealed tambm no podero ser sobrescritos.

Linguagem de Programao C#

99

Exemplo de implementao de uma classe sealed em C#
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);
}
}

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

Linguagem de Programao C#

100

CAPTULO 10 Tratamento de Erros e Excees
No mundo dos frameworks e linguagens de programao, as excees, aes que causam
anomalias nas aplicaes so tratadas de diversas formas. O .NET Framework elege, pelo poder e pela
flexibilidade, o tratamento de excees estruturadas. Desta forma o C# tambm utiliza-se deste modelo
estruturado, uniforme e type-safe.
Quando uma exceo ocorre, um objeto herdado de System.Exception, criado para represent-la.
O modelo orientado `a objetos permite que seja criada uma exceo definida pelo usurio que herdada
de System.Exception ou de uma outra classe de exceo pr-definida. As excees pr-definas mais
comuns so apresentadas na Tabela 9.
As excees podem ser disparadas de duas formas: atravs do comando throw, fornecendo a
instncia de uma classe herdada de System.Exception, ou em certas circunstncias durante o
processamento dos comandos e expresses que no podem ser completadas normalmente. Os comando
em C# para utilizao do tratamento de excees estruturados so: try bloco de proteo do Cdigo,
catch - filtra e trata a exceo, finally - sempre executado aps o disparo da exceo ou no, e throw -
dispara uma exceo.

10.1 Comando throw
O comando throw utilizado para disparar ou sinalizar a ocorrncia de uma situao inesperada
durante a execuo do programa, ou seja uma exceo. O parmetro seguido deve ser da classe
System.Exception ou derivada.
Classes de excees mais comuns em C#
Exceo Descrio (disparado quando)
System.OutOfMemoryException alocao de memria, atravs de new, falha.
System.StackOverflowException
quando a pilha(stack) est cheia e
sobrecarregada.
System.NullReferenceException
uma referncia nula(null) utilizada
indevidamente.
System.TypeInitializationException um construtor esttico dispara uma exceo.
System.InvalidCastException
uma converso explcita falha em tempo de
execuo.
System.ArrayTypeMismatchException o armazenamento dentro de um array falha.
System.IndexOutOfRangeException
o ndice do array menor que zero ou fora do
limite.
System.MulticastNotSupportedException a combinao de dois delegates no nulo falham.
System.ArithmeticException
DivideByZeroException e OverflowException.
Base aritmtica.
System.DivideByZeroException ocorre uma diviso por zero.
System.OverflowException
ocorre um overflow numa operao aritmtica.
Checked.


Linguagem de Programao C#

101

Cdigo 42: Exemplo de utilizao do comando throw
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
{
ArgumentOutOfRangeException ex;
ex = new ArgumentOutOfRangeException("Utilize uma string
somente" );
throw (ex); // Dispara a exceo
}
}
}

10.2 Bloco try - catch
Uma ou mais instrues catch so colocadas logo abaixo do bloco try para interceptar uma
exceo. Dentro do bloco catch encontrado o Cdigo de tratamento da exceo. O tratamento da
exceo trabalha de forma hierrquica, ou seja quando uma exceo disparada, cada catch verificado
de acordo com a exceo e se a exceo ou derivada dela encontrada o bloco ser executado e os
outros desprezados, por isso, na implementao muito importante a sequncia dos blocos catch. O catch
tambm pode ser encontrado na sua forma isolada, tratando qualquer exceo no detalhada.
Exemplo de utilizao do bloco try - catch
using System ;
class Catchs
{
public static void Main ()
{
int iMax =0;
Console.Write("Entre um inteiro para valor mximo, entre 0 e o mximo
ser sorteado:");
try
{
iMax = Console . ReadLine (). ToInt32 ();
Random r = new Random (); // Instncia a classe Random
int iRand = r. Next (1, iMax ); // Sorteia randomicamente entre
0 e mximo
Console.Write("O valor sorteado entre 1e {1} {0}", iRand
,iMax);
}
catch ( ArgumentException )
{
Console.WriteLine("0 no um valor vlido");
}
catch ( Exception e)
{
Console . WriteLine (e);
}
}}

10.3 Bloco try - finally
A instruo finally garante a execuo de seu bloco, independente da exceo ocorrer no bloco.
Tradicionalmente o bloco finally utilizado para liberao de recursos consumidos, por exemplo fechar um
arquivo ou uma conexo.
Linguagem de Programao C#

102

Exemplo de utilizao do bloco try - finally
using System ;
class TryFinally
{
public static void Main ()
{
try
{
throw new Exception("A exceo...");
// Dispara a exceo
}
finally
{
Console.WriteLine("O bloco finally sempre executado" );
}
Console.WriteLine("Esta linha no ser executada...");
}
}
Se no tratada, o comportamento de qualquer exceo de terminao, como podemos concluir no
exemplo acima. Lembrando que, o tratamento de uma exceo, ou sua interceptao, feita no bloco
catch.

10.4 Bloco try - catch - finally
Os comandos try, catch e finally podem ser utilizados em conjunto, como no exemplo:
Cdigo 45: Exemplo de utilizao do bloco try - catch - finally
using System ;
using System . Xml;
class TryCatchFinally
{
public static void Main ()
{
XmlDocument doc = null ;
try
{
doc = new XmlDocument ();
doc . LoadXml("<Exception> The Exception </Exception> " );
// Carrega o contedo
throw new Exception(doc.InnerText ); // Dispara a exceo
}
catch ( OutOfMemoryException )
{
// Tratamento aqui
}
catch ( NullReferenceException )
{
// Tratamento aqui
}
catch ( Exception e)
{
// Tratamento aqui
Console.WriteLine("Excesso ocorrida no programa" , e);
}
finally
{
Console. WriteLine (@"Gravando o Documento no C:\" );
// Uso do verbatim (@)
doc. Save (@"c:\exception.xml");
// Grava o contedo
}
Console.WriteLine("Esta linha no ser executada...");
}
}
Linguagem de Programao C#

103

10.5 A classe Exception
A forma mais comum e generalizada de disparo de uma exceo atravs da classe base
Exception. Ela fornece as informaes necessrias para tratamento das excees, possuindo alguns
membros, mtodos e propriedades, que trazem as informaes necessrias decorrentes do erro.
Normalmente uma instncia de classe, ou derivada, utilizada atravs de um bloco catch, como vimos nos
exemplos anteriores.
Vamos descrever alguns membros da classe Exception:
Message: retorna uma string com o texto da mensagem de erro.
Source: possui ou define a uma string com o texto da origem (aplicao ou objeto) do erro.
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.
InnerException: retorna uma referncia para uma exceo interna.
TargetSite: retorna o mtodo que disparou esta exceo.
GetBaseException: retorna uma referncia para uma exceo interna.
SetHelpLink: define o link(URN ou URL) para arquivo de ajuda.
Membros da classe Exception
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 exceo static" );

throw e. GetBaseException ();

e. SetHelpLink ("http://www.microsoft.com/brasil/msdn");

Linguagem de Programao C#

104

CAPTULO 11 - Funes Matemticas
Disponvel no pacote System.Math
Abs valor absoluto de um nmero
Acos ngulo a partir de um determinado cosseno
Asin - ngulo a partir de um determinado seno
Atan - ngulo a partir de uma determinada tangente
Atan2 - ngulo a partir do quociente de 2 nmeros espeficicados
Ceiling menor nmero inteiro maior ou igual a um dado nmero
Cos cosseno de um ngulo especificado
Cosh cosseno hiperblico de um ngulo especificado
Exp nmero determinado elevado ao expoente especificado
Floor maior inteiro menor ou igual ao nmero especificado
Log logaritmo de um nmero especificado
Log10 logaritmo de base 10 de um nmero especificado
Max maior de 2 nmeros especificados
Min menor de 2 nmeros especificados
Pow nmero especificado elevado pelo expoente especificado
Round nmero mais prximo do valor especificado
Sign valor indicando o sinal de um nmero
Sin - seno de um ngulo especfico
Sinh seno hiperblico de um ngulo especfico
Sqrt raiz quadrada de um nmero especificado
Tan tangente de um ngulo especificado
Tanh tangente hiperblica de um ngulo especificado

11.1 Funes para manipular Strings no C#
O tipo string apesar de se comportar como um value type na verdade um reference type. Apesar
disso, devemos considerar que estamos trabalhando com um value type quando estamos manipulando
strings, tendo em vista que este tipo de dado foi programado para funcionar como tal.
A classe string possui uma srie de mtodos estticos e no estticos, que so utilizamos para
formatao, concatenao, desmembramento, substring, etc. Vamos analisar alguns destes mtodos da
classe string.

O mtodo Substring
O mtodo substring um mtodo no esttico que permite pegarmos uma poro de uma string.
Para utilizarmos o mtodo substring, basta chamar o mtodo a partir de uma varivel string ou mesmo de
uma string literal, conforme o exemplo.
string nome = "Testando da Silva";
string sobreNome = nome.Substring(12,5);
Linguagem de Programao C#

105

O mtodo substring aceita como parmetro a posio inicial que queremos obter e quantos
caracteres devem ser extrados. Caso no seja informado o nmero de caracteres a ser extrado, a funo
retornar o restante da string a partir da posio inicial informada.

O mtodo IndexOf
O mtodo IndexOf utilizado para localizar uma determinada palavra dentro da string. Este mtodo
retornar a posio da string desejada. Caso a string no seja encontrada, ser retornado o valor -1.
string nome = "Testando da Silva";
int pos = nome.IndexOf("Silva");
//A partir do ndice 5
int pos2 = nome.IndexOf("Silva", 5);

Conforme vimos no exemplo, possvel informar a posio inicial para busca como um parmetro
adicional.

Funes ToUpper e ToLower
As funes ToUpper e ToLower permitem colocar uma string em letra minsculas ou maisculas,
conforme o exemplo a seguir.
string nome = "Maurcio";
nome = nome.ToUpper();
nome = nome.ToLower();

Funes StartsWith e EndsWith
As funes startswith e endswith verificam se a string comeo ou termina com uma determinada
palavra ou caracter. Estas funes retornam um valor booleano (true ou false).
string arquivo = "comctl32.dll";
if(nome.StartsWith("com"))
Console.WriteLine("Comea com COM!");
if(nome.EndsWith(".dll"))
Console.WriteLine(" uma dll!");

Funes TrimStart, TrimEnd e Trim
As funes de Trim servem para remover espaos em branco das strings. A funo TrimStart
remove os espaos em branco do incio da string, j a funo TrimEnd remove os espaos em branco do
final da string. A funo Trim remove os espaos em branco do inicio e do fim da string.
string nome = " MAURICIO ";
nome = nome.TrimEnd();
nome = nome.TrimStart();
nome = nome.Trim();

Funes PadLeft e PadRight
As funes PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um
caracter especificado. Os exemplos a seguir mostra o uso das funes PadLeft e PadRight.
Linguagem de Programao C#

106


string nome = "Mauricio";
nome = nome.PadRight(10, ' ');
// "Mauricio "
string codigo = "123";
codigo = codigo.PadLeft(6, '0');
// "000123"

Funes String.Join e String.Split
A funo Split serve para quebrar uma string em um array de strings de acordo com um separador.
Ao contrrio da funo split, a funo Join concatena um array de string inserindo um separador.
string linha = "Teste, 10, 20, 10/06/2007";
string[] campos = linha.Split(',');
string linhaNova = String.Join(';', campos);

A Funo String.Format
A funo String.Format uma das funes mais versteis da classe string. Esta funo permite a
criao de uma string baseada em um padro. Podemos colocar dentro do padro da string de formatao
alguns tokens que poderam ser substitudos por variveis passadas por parmetro no comando format.
string teste = String.Format("Vou colocar o {0} aqui.", "parmetro");

No exemplo acima, o padro da string (primeiro parmetro) contm um token {0}. Este token indica
que este valor deve ser substituido pelo segundo parmetro passado para a funo (neste caso a palavra
parmetro).
sTeste = String.Format("Formatao de string com {0} parmetro. ",
"Agora so {1}. Valor numrico: {2}", 1, Now(), 15.5);

No exemplo acima, temos o padro da string com mais de um token, com nmeros de 0 2. A
funo tambm recebe 3 parmetros adicionais que correspondem aos valores que sero substi tudos na
string. Alm de informarmos os tokens, podemos informar regras de formatao que sero utilizadas de
acordo com o tipo de dado passado por parmetro, conforme o exemplo,
sTeste = String.Format("Custom Format: {0:d/M/yyy HH:mm:ss}", dtHoje);
sTeste = String.Format("Formatao do nmero inteiro: {0:D}.", iNumero);
sTeste = String.Format("Formatao do nmero inteiro: {0:D4}.", iNumero);

A classe StringBuilder
Apesar da versatilidade da classe string, operaes com string podem consumir muitos recursos e
causar perda de desempenho. Isto ocorre porque a cada operao o framework cria um novo buffer para a
string resultante da operao, ao invs de aproveitar o buffer que est sendo utilizado. Isto mais
aparente em operaes de concatenao.
Para no criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace
System.Text. Esta classe permite a criao de strings aproveitando o buffer utilizado, o que torna o cdigo
mais eficiente.
Linguagem de Programao C#

107

No exemplo a seguir temos um trecho de cdigo com uma operao feita de forma ineficiente e
outra mais eficiente usando o stringBuilder, veja a diferena.
// Codigo ineficiente
string sql;
sql = "SELECT * FROM Products";
sql += " WHERE CategoryId=1 AND";
sql += " AND UnitPrice>10";

// Codigo Eficiente
StringBuilder sb = new StringBuilder();

sb.Append("SELECT * FROM Products");
sb.Append(" WHERE CategoryId=1 AND");
sb.Append(" AND UnitPrice>10");
sql = sb.ToString();

LastIndexOf
Informa a posio de ndice da ltima ocorrncia de um caractere Unicode especificado ou String
dentro dessa instncia.
Remove
Exclui um nmero especificado de caracteres de uma String
Replace
Substitui todas as ocorrncias de um caractere ou de uma String, por outro caractere ou por outra
String.
ToString
Converte um valor numero em uma String.
Copy
Cria uma cpia de uma String com o mesmo valor String.
Equals
Determina se dois valores do tipo String so iguais.


Linguagem de Programao C#

108

Captulo 12 - Funes para Manipulao de Arquivos
Com a manipulao de arquivos, podemos criar, editar e excluir arquivos ou diretrios. Para que
possamos trabalhar com as classes referente a manipulao de arquivos devemos utilizar o pacote:
System.IO (IO Input/Output significa Entrada/Sada).
As principais classes que esto nesse pacote:

12.1 Classes DirectoryInfo e FileInfo
possvel recuperar algumas informaes de arquivos e diretrios, como data de criao,
extenso, entre outros. Para isso utiliza-se em C# as classes DirectoryInfo e FileInfo.
Utiliza-se DirectoryInfo quando se deseja informaes sobre um diretrio, e FileInfo para
informaes de um arquivo.
Principais classes do System.IO
Classe Uso
Directory, File, DirectoryInfo, e FileInfo
Cria, exclui e move arquivos e diretrios. Ainda
retorna informaes especficas sobre arquivos ou
diretrios
FileStream
Usado para escrever/ler informaes em arquivo
com ajuda das classes StreamReader e Stream-
Writer
StreamWriter e StreamReader L e escreve um informao textual
StringReader e StringWriter
L e escreve um informao textual a partir de um
buffer de string
A seguir esto listadas algumas propriedades e mtodos que essas classes oferecem:
Propriedades e mtodos de DirectoryInfo e FileInfo
Propriedade/Mtodo Uso
Attributes Retorna os atributos associados aos arquivos
CreationTime Retorna a hora de criao do arquivo
Exists Checa se o arquivo/diretrio existe
Extension Retorna a extenso do arquivo
LastAccessTime Retorna a hora do ltimo acesso
FullName Retorna o nome completo do arquivo/diretrio
LastWriteTime
Retorna a hora da ultima escrita no
arquivo/diretrio
Name Retorna o nome do arquivo/diretrio
Delete() Exclui o arquivo/diretrio

Linguagem de Programao C#

109

12.1.1 Criando diretrios e subdiretrios
Para criar um diretrio utiliza-se a seguinte notao:
Criao de diretrio
DirectoryInfo dir1 = new DirectoryInfo (@"F:\WINNT");
Para criar um subdiretrio:
Cdigo 48: Criao de subdiretrios
DirectoryInfo dir = new DirectoryInfo(@"F:\WINNT");
try
{
dir.CreateSubdirectory("Sub");
dir.CreateSubdirectory(@"Sub\MySub");
}
catch ( IOException e)
{
Console.WriteLine(e.Message);
}

12.1.2 Acessando as propriedades
Para acessar as propriedades de um diretrio utiliza-se a seguinte notao:
Cdigo 49: Propriedades de um diretrio
Console.WriteLine("Full Name is:{0}",dir1.FullName);
Console.WriteLine("Attributes are:{0}",dir1.Attributes.ToString());
Abaixo um exemplo de acesso `as propriedades de arquivos:
Cdigo 50: Propriedades de arquivos
DirectoryInfo dir = new DirectoryInfo(@"F:\WINNT");
FileInfo [ ] bmpfiles = dir.GetFiles("*.bmp");
Console.WriteLine("Total number of bmp files" , bmpfiles.Length);
Foreach(FileInfo f in bmpfiles )
{
Console.WriteLine("Name is : {0}" , f.Name);
Console.WriteLine("Length of the file is : {0}" , f.Length);
Console.WriteLine("Creation time is : {0} " , f.CreationTime);
Console.WriteLine("Attributes of the file are : {0} " ,
f.Attributes.ToString());
}


Linguagem de Programao C#

110

12.2 Criando arquivos usando a classe FileInfo
Com a classe FileInfo, possvel criar novos arquivos, acessar suas informaes, exclu-los e
move-los. Essa classe tambm oferece mtodos para abrir, ler e escrever um arquivo. O seguinte exemplo
mostra como possvel criar um arquivo texto e acessar suas informaes.
Cdigo 51: Criando arquivos com a classe FileInfo
FileInfo fi = new FileInfo(@"C:\Myprogram.txt" );
FileStream fstr = fi.Create();
Console.WriteLine("Creation Time: {0} " ,fi.CreationTime );
Console.WriteLine("Full Name: {0}" ,fi.FullName );
Console.WriteLine("File Attributes : {0} " ,fi.Attributes.ToString());
//Way to delete Myprogram .txt file .
Console.WriteLine("Press any key to delete the file" );
Console.Read();
fstr.Close();
fi.Delete();

12.2.1 Entendendo o mtodo Open()
Com o mtodo Open(), disponvel na classe FileInfo, possvel abrir um arquivo. Deve-se passar
no construtor, o modo de abertura e acesso ao arquivo.
O seguinte exemplo ilustra essa situao:
Cdigo 52: Abrindo arquivos com a classe FileInfo
FileInfo f = new FileInfo("c:\myfile.txt");
FileStream s = f.Open(FileMode.OpenorWrite, FileAccess.Read);

12.2.2 Entendendo a classe FileStream
Ao abrir ou criar nossos arquivos, o atribumos 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
possvel:
Cdigo 53: Escrevendo/Lendo com FileStream
FileStream fs = new FileStream (@"c:\mcb.txt", FileMode.OpenOrCreate,
FileAccess.Write);
StreamWriter sw = new StreamWriter (fs);
sw.write("teste");
sw.writeLine("teste");
sw.Close();
FileStream fs = new FileStream(@"c:\mcb.txt",FileMode.OpenOrCreate,
FileAccess.Write );
StreamReader sr = new StreamReader (fs);
string texto ;
texto = sr.ReadToEnd();
sr.Close();
Linguagem de Programao C#

111

12.2.3 Mtodos CreateText() e OpenText()
O mtodo CreateText() retorna um StreamWriter que vai escrever um arquivo. O mtodo
OpenText() retorna um StreamReader que vai ler um arquivo. Esses mtodos so utilizados quando
trabalha-se com arquivos de texto puro. Exemplos de utilizao dos mtodos:
Cdigo 54: CreateText e OpenText
FileInfo fi = new FileInfo("c:\myfile.txt");
StreamReader txtR ;
txtR = fi.OpenText();
string read = null ;
while(( read = txtR.ReadLine()) != null )
{
Console.WriteLine(read);
}
s.Close();
// Mtodo ReadToEnd ();
Console.WriteLine(txtR.ReadToEnd());
FileInfo fi = new FileInfo("c:\myfile.txt");
StreamWriter txtW ;
txtW = fi.CreateText();
txtW.Write("teste");
txtW.Close ();


Linguagem de Programao C#

112

CAPTULO 13 Aprofundando Windows Forms
Um programa dificilmente desenvolvido com apenas um formulrio (Form). Sempre temos vrios
deles nos nossos programas, vamos estudar neste capitulo como trabalhar com vrios formulrios. Alm
disso, vamos estudar as propriedades mais importantes dos formulrios.
Basicamente podemos ter os seguintes tipos de interface Windows:
MDI (Multiple Document Interface): Aplicao que suporta mltiplos documentos abertos
simultaneamente, como o Word por exemplo.
SDI (Single Document Interface): Aplicao que permite a abertura de apenas um documento
de cada vez. Exemplo: O Paint do Windows, a calculadora, o Internet Explorer.
Janelas modais. Exemplo: As janelas informativas conhecidas como dilogos.

13.1 Aplicaes MDI
As aplicaes MDI tm como objetivo criar vrias instncias (filhos) dentro de uma aplicao
principal (pai). Por esse motivo temos que seguir alguns passos para configurar esse ambiente. Para
definir uma janela como principal (janela pai) altera-se a propriedade isMdiContainer = true ainda em
tempo de compilao.

13.1.1 Adicionando uma nova janela filha
Para adicionar uma nova janela filha, devemos inserir um novo formulrio ao projeto: menu File/Add
> New Item, selecione Windows Forms.
Ao instanciarmos uma nova janela filha utilizamos a seguinte codificao:
Cdigo 55: Janela filha (MDI)
wndFilha myWnd = new wndFilha( );
myWnd.MdiParent = this;
myWnd.Text = " Janela Filha";
myWnd.Show ();
O que se fez aqui?
Criamos uma nova instncia do formulrio que constitui a nossa janela filha;
Em seguida, definimos o pai da janela filha ajustando a propriedade MdiParent do formul rio como
sendo o formulrio principal. Por essa razo, atribumos a essa propriedade o valor this, indicando que a
janela pai o objeto correspondente ao formulrio principal.
Finalmente mostramos a janela filha chamando o mtodo Show().

Linguagem de Programao C#

113

3.1.2 Fechando uma janela filha
Para fechar uma janela filha MDI ativa utiliza-se a seguinte notao:
Cdigo 56: Fechar janela filha (MDI)
if ( this . MdiChildren . Length != 0)
this . ActiveMdiChild . Close ( );

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

13.2.1 Exemplo mltiplos formulrios
Vamos fazer um exemplo que ilustra como podemos trabalhar com mltiplos formulrio:
1. Crie uma Windows Application chamada Formulrios;
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;
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;
Se a uma mensagem de confirmao aparecer, clique em Sim. Isso vai atualizar todas as
referencias ao form do projeto para o novo nome.
6. Mude a propriedade BackColor do frmVermelho para a cor Vermelha;
7. Mude a propriedade BackColor do frmVerde para Verde;
8. No Form1 de um clique duplo sobre o boto Vermelho e digite o seguinte Cdigo dentro do
procedimento do evento click:
Cdigo 57: Cdigo para exibir formulrio
frmVermelho Vermelho = new frmVermelho();
Vermelho.Show();
9. Faa o mesmo para o boto Verde mas digite o seguinte Cdigo:
Cdigo 58: Cdigo para exibir formulrio com show dialog
frmVerde Verde = new frmVerde();
Verde.ShowDialog ();
10. Execute a aplicao.
Note que para a chamada de um formulrio necessrio que o mesmo seja instanciado.
Com o formulrio Vermelho aberto, perceba que voc pode clicar novamente no Form1 e depois
voltar para o Vermelho e assim por diante, o que no acontece com o formulrio Verde.
Isso porque usamos o mtodo ShowDialog ao invs do mtodo Show.
Linguagem de Programao C#

114

13.3 Passando valores entre Forms
Continuando com o exemplo anterior, vamos alterar um componente de um formulrio, em outro:
1. Adicione 1 button e 1 label no formulrio frmVermelho;
2. V para o painel de Cdigo do frmVermelho e dentro da classe frmVermelho digite o seguinte Cdigo:
Cdigo 59: Varivel pblica do tipo string
public string mensagem ;
Isso cria uma varivel publica do tipo string chamada Mensagem.
3. V para o Form1 e de um clique duplo sobre o boto Vermelho.
4. Adicione o seguinte Cdigo:
Cdigo 60: Modificando o valor da string
Vermelho.mensagem = "Formulario Form1" ;
5. Volte para o frmVermelho, de um clique duplo sobre o button1 e digite o seguinte Cdigo no
procedimento:
Cdigo 61: Modificando o valor da label para um string local
label1.Text = mensagem;
Isso adiciona o contedo da varivel mensagem no Label1.
6. Execute a aplicao.
O contedo da varivel foi exibida no label1. O mais importante desta lio que voc agora
capaz de passar valores entre formulrios.

13.4 Posicionando os formulrios na tela
Por questes de esttica, temos a possibilidade de alterar algumas propriedades dos componentes
para que eles se tornem mais apresentveis. O posicionamento de formulrio na tela ilustra uma dessas
possibilidades. Vamos estudar algumas modificaes na propriedade StartPosition.
CenterScreen: Essa propriedade faz com que o formulrio em questo seja exibido no centro da
tela;
Manual: Deve-se especificar manualmente como os valores que sero usados para posicionar o
formulrio na tela.
A propriedade location faz o posicionamento x, y do formulrio na tela. Se alterarmos a
propriedade para (100, 50), o formulrio ser exibido a 100 pixels da lateral esquerda e 50 pixels do topo
da tela.
A propriedade WindowsState altera o estado inicial do meu formulrio principal:
Normal: Abre o formulrio em seu estado inicial;
Minimized: Abre o formulrio minimizado na barra de tarefas;
Maximized: Abre o formulrio maximizado.

13.5 Controlando os eventos dos formulrios
Os eventos so aes atribudas ao comportamento do formulrio. Sempre que um evento ocorre
um bloco de Cdigo pode ser processado, esse bloco de Cdigo conhecido como Manipulador de
Evento.
O .NET Framework usa uma nomeao padro para os Manipuladores de Eventos. Essa
nomeao combina o nome do objeto com o evento correspondente ligando-os por um underline, exemplo:
button1 Click; form1 Load.
Linguagem de Programao C#

115

CAPTULO 14 Conexo com Banco de Dados

14.1 O que o ADO.NET ?
O ADO.NET uma nova tecnologia baseada no ADO (Active Data Objects), com muito mais
recursos. O ADO.NET possui um modelo para manipulao de dados completamente diferente da verso
anterior do ADO, simplificando o processo de conexo e manipulao de dados.
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 manipulao
dos dados feita toda em memria e posteriormente enviada ao banco de dados.
Por trabalhar de uma forma voltada ao modelo desconectado, o ADO.NET possui uma camada de
persistncia em XML. possvel gravar e ler todo o contedo de todo um conjunto de armazenado nas
estruturas do ADO.NET em XML.
O ADO.NET faz parte do .NET Framework, e composto por um conjunto de classes, interfaces,
tipos e enumeraes.

14.2 Os namespaces relacionados ao ADO.NET
Para trabalharmos com o ADO.NET em uma aplicao .NET, necessrio utilizarmos algumas das
namespaces disponveis nas bibliotecas do .NET Framework. Alguns dos principais namespace so:
System.Data: Contm a infra-estrutura bsica para trabalharmos com qualquer base de dados
relacional. Neste namespace encontramos as classes responsveis por armazenar as estruturas dos
bancos relacionais em memria;
System.Data.Common: Contm as interfaces comuns a todos os bancos de dados. Este
namespace utilizado internamente pelo framework e por fabricantes de bancos de dados, para a
construo de bibliotecas de acesso;
System.Data.SqlClient: Biblioteca de acesso ao SQL Server. Permite a conexo, a extrao e a
execuo de comandos em servidores SQL Server de verso 7 ou superior;
System.Data.OleDb: Biblioteca de acesso para bancos de dados que suportam OleDb. Permite
conexo, a extrao e a execuo de comandos nestes bancos de dados. necessrio informar o
provedor OleDb a ser utilizado. Permite acesso a bancos mais simples, como o Access;
System.Data.SqlTypes: Contm a definio dos tipos nativos do SQL Server;
System.XML: Contm as classes para manipulao de documentos XML. Como o ADO.NET
possui uma camada de persistncia em XML, este namespace amplamente utilizado.

14.3 O modelo de execuo do ADO.NET
O ADO.NET prov uma estrutura de acesso a dados que permite o acesso a mltiplas bases de
dados simultaneamente. possvel 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 de
objetos (DataTables) que representam resultados tabulares extrados da base de dados.
Linguagem de Programao C#

116


Esquema acesso ao banco de dados
Para fazer a extrao dos dados, o ADO.NET utiliza os chamados .NET Data Providers.
Os Data Providers so bibliotecas de classes especializadas para o acesso a um tipo de banco de
dados relacional. Por serem uma implementao especfica para o banco de dados, estas possuem um
acesso bem mais eficiente do que outras bibliotecas como a OleDb.
Segue uma lista de data providers disponveis para os bancos citados:
Firebird .NET Data Provider;
MySQL .NET Data Provider;
Npgsql .NET Data Provider;
Apesar de serem uma implementao especfica para um tipo de banco de dados, as classes dos
Data Providers possuem uma estrutura comum.

14.4 O modelo de execuo em um ambiente conectado
O ADO.NET capaz de trabalhar com dois modelos, o modelo conectado e o modelo
desconectado.
No modelo conectado necessrio manter a conexo aberta enquanto so realizadas as
operaes de leitura e gravao.
Para trabalharmos em um modelo conectado, devemos observar alguns objetos disponveis nas
classes dos .NET Data Providers, que devem ser utilizados na seguinte ordem:
XxxConnection: o objeto utilizado para estabelecer a conexo com o banco. necessrio
informar os parmetros de conexo e abrir a conexo com o banco. Exemplos dessa classe so
SqlConnection e OleDbConnection;
XxxCommand: um objeto utilizado para enviar comandos a base de dados. necessrio montar
a clusula Sql desejada e informar ao objeto de comando. Ao executar o comando, este pode devolver um
objeto do tipo XxxDataReader;
XxxDataReader: 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 necessrio fechar o DataReader e
a conexo;


Linguagem de Programao C#

117

14.5 O modelo de execuo em um ambiente desconectado
O modelo de execuo em um ambiente desconectado utiliza outros objetos. Neste modelo
utilizamos o objeto DataSet para armazenar e manipular os dados em memria e o objeto XxxDataAdapter
para extrair e enviar as alteraes ao banco de dados. O objeto de conexo tambm utilizado neste
modelo.
Os passos para extrao e manipulao dos dados em um ambiente desconectado so:
1. aberta uma conexo utilizando um objeto XxxConnection (OleDbConnection ou Sql-
Connection por exemplo);
2. criado um objeto do tipo XxxDataAdapter que responsvel por fazer a extrao de dados do
banco de dados para a memria e o posterior envio dos dados da memria para o banco de dados;
3. Utilizando o mtodo Fill, extramos 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 memria da aplicao para
serem manipulados;
4. Como os dados esto em memria, possvel inserir, remover ou alterar registros do DataSet;
5. Ao finalizar as alteraes, restabelecemos a conexo com o banco de dados para enviar as
alteraes;
6. Utilizando o mtodo Update do DataAdapter, enviamos as alteraes para o banco de dados. O
DataAdapter verifica os tipos de alteraes que foram realizadas e executa o comando correspondente no
banco de dados (insero, excluso, atualizao);
7. Ao finalizar o processo, fechamos a conexo com o banco de dados.

14.6 Estabelecendo uma conexo com um banco de dados
O primeiro passo para criarmos uma aplicao com conexo a um banco de dados estabelecer a
conexo com o banco. Para estabelecermos a conexo, devemos criar um objeto de conexo.
Ao criarmos uma instncia da classe que ir se conectar, devemos informar uma string de conexo,
que contm todos os parmetros para a conexo com o banco de dados, como usurio e senha.
A string de conexo possui uma srie de parmetros, que pode variar de acordo com o banco de
dados utilizado. Os parmetros da string de conexo so separados por ponto e vrgula, e devem ser
informados com a seguinte Notao:
Cdigo 62: Padro para Connection Strings
"Nome do Parmetro = Valor do Parmetro"
Abaixo est uma classe com string de conexo para os bancos MySQL, Firebird e Post-GreSQL:
Cdigo 63: Padro para Connection Strings
class Global
{
public static string cnmysql = "database=dados; datasource=lo
calhost; userid = root; password = <password>";
public static string cnfirebird = "User=SYSDBA;
Password=masterke;Database=C:\\dados.fdb;DataSource=localhost;Dialect=3;Charset
=WIN1252;Role=;Connectionlifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;
PacketSize=4096;ServerType=0";
public static string cnpostgree =
"UserID=postgres;Password=password;Host=localhost;Port=5432;Database=dados;Pool
ing=true;MinPoolSize=0;MaxPoolSize=100;ConnectionLifetime=0";
}
Linguagem de Programao C#

118

14.7 Criando comandos
possvel executar comando no banco de dados atravs da classe SqlCommand. Ao criar um
objeto dessa classe, devemos informar o comando Sql a ser executado, bem como a conexo a ser
utilizada. Estes parmetros podem ser informados tanto no construtor da classe SqlCommand como
tambm atravs das propriedades CommandText e Connection.
Os comandos SQL informados em um objeto de comando podem ser de qualquer tipo: que
retornam um conjunto de linha, que retornam um valor especfico, ou que no retornam nenhuma quer.
Cada um destes tipos de comando SQL possui um mtodo para execuo.
Atravs da classe SqlCommand tambm possvel executar Stored Procedures do banco de
dados, sendo necessrio apenas informar o nome da stored procedure no parmetro Command- 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.
Cdigo 64: Exemplo de utilizao do comando SqlCommand
SqlCommand oCmd = New SqlCommand ("UPDATE Products SETU nit Price = Unit
Price*1.1");
oCmd.Connection = oConn ;
oCmd.CommandText = "UPDATE Products SET Unit Price=Unit Price * 1.05";

14.8 Executando comandos
Para executarmos os comandos especificados na classe SqlCommand, precisamos executar um
dos mtodos de execuo disponveis. Os mtodos de execuo variam de acordo com a natureza do
comando executado. Os trs mtodos mais comuns so:
ExecuteNonQuery: Para comandos que no executam consultas (querys);
ExecuteScalar : Para comandos que executam resultados escalares;
ExecuteReader: Para comandos que retornam conjuntos de dados.

14.8.1 O mtodo ExecuteNonQuery
O mtodo ExecuteNonQuery utilizado quando queremos executar um comando que no retorna
como resultado um conjunto de dados. Este mtodo utilizado para comandos de atualizao e insero e
tambm para comando DCL (Data Control Language) suportados pelo banco de dados.
Opcionalmente podemos informar um parmetro para este mtodo para obter o nmero de linhas
afetadas pelo comando executado.
Um exemplo de utilizao do comando ExecuteNonQuery pode ser observado a seguir.
Cdigo 65: Exemplo de utilizao do comando ExecuteNonQuery
SqlCommand oCmd = new SqlCommand("UPDATE Products SET Unit Price = Unit
Price * 1.1");
oCmd.Connection = oConn ;
oCmd.CommandText = "UPDATE Products SET Unit Price = Unit Price * 1.05";
oCmd.ExecuteNonQuery();

14.8.2 O mtodo ExecuteScalar
O mtodo ExecuteScalar utilizado para comandos que retornam valores escalares, ou seja,
valores nicos. Em geral utilizado para comandos que retornam uma contagem de registros ou que
executam ao comando de agregao no banco de dados.
Linguagem de Programao C#

119

Este comando pode retornar qualquer tipo de dado. Um exemplo de utilizao do comando
ExecuteScalar pode ser observado a seguir.
Cdigo 66: Exemplo de utilizao do comando ExecuteScalar
SqlCommand oCmd = new SqlCommand("UPDATE Products SETU nit Price = Unit
Price * 1.1");
oCmd.Connection = oConn ;
oCmd.CommandText = "SELECT COUNT(*) FROM Products";
int iNumProdutos ;
iNumProdutos = oCmd.ExecuteScalar();

14.8.3 O mtodo ExecuteReader
O mtodo ExecuteReader utilizado para executar querys que retornam um conjunto de dados.
Este mtodo tem como resultado um objeto do tipo SqlDataReader.
A classe SqlDataReader representa um cursor aberto no banco de dados com os dados retornados
pela query informada no objeto de comando.
Para lermos os dados de um DataReader, necessrio executamos o mtodo Read. Este mtodo
retorna verdadeiro caso um registro tenha sido lido do cursor do banco de dados, e falso quando no
houver mais registros a serem lidos. necessrio chamar o mtodo Read pelo menos uma vez, pois o
cursor aberto no fica posicionado no primeiro registro.
Como o DataReader mantm um cursor aberto com o banco de dados, no possvel realizar
nenhuma operao no banco de dados (utilizando a conexo utilizada pelo DataReader) enquanto o
DataReader estiver aberto. Por tanto, necessrio fechar o DataReader imediatamente aps a sua
utilizao.
Um exemplo de utilizao do mtodo ExecuteReader e da classe DataReader pode ser observado
a seguir.
Cdigo 67: Exemplo de utilizao do comando ExecuteReader
SqlCommand oCmd=new SqlCommand ("SELECT ProductName,ProductId FROM Products"
,oConn);
SqlDataReader oDr;
oDr = oCmd.ExecuteReader ();
while (oDr.Read ())
{
Debug.WriteLine ( oDr("Product Name").ToString());
}

14.9 Passando parmetros
possvel passar parmetros para os objetos da classe SqlCommand. Para indicarmos parmetros
nas querys informadas neste objeto, utilizamos o smbolo @ como prefixo para indicar um parmetro. Esta
sintaxe pode variar de acordo com o banco de dados utilizado (o Oracle utiliza :por exemplo).
Depois de indicar os parmetros na query, preciso adicionar objetos do tipo SqlParameter na
coleo de parmetros do SqlCommand. A coleo de parmetros pode ser acessada atravs da
propriedade Parameters do objeto de comando.

Linguagem de Programao C#

120

Um exemplo de criao de parmetros pode ser observado a seguir.
Cdigo 68: Exemplo de utilizao de parmetros
SqlConnection oConn = new SqlConnection ( sConnString );
SqlCommand oCmd = new SqlCommand ();
oCmd.Connection = oConn ;
oCmd.CommandText = "UPDATE Products" + "SETUnitPrice = @UnitPrice" +
"WHERE ProductId = @ProductId";
SqlParameter oParam = new SqlParameter("@UnitPrice", 1.5);
oCmd.Parameters.Add(oParam);
oParam = new SqlParameter ();
oParam.ParameterName = "@ProductId";
oParam.DbType = DbType.Int32 ;
oParam.Value = 1;
oCmd.Parameters.Add(oParam );
oCmd.ExecuteNonQuery();

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

14.11 O que um DataAdapter?
O DataAdapter a classe responsvel por fazer a interao entre a base de dados e o DataSet.
Ela possui quatro propriedades que representam os quatro comandos principais que utilizamos
para interagir com o banco de dados.
Para realizar a extrao de dados do banco de dados para o DataSet, o DataAdapter usa o
comando de select, contido na propriedade SelectCommand.
Aps extrairmos os dados para o DataSet, podemos modificar estes dados (que esto
armazenados em memria). `A medida que modificamos os dados do DataSet, este faz uma marcao nas
alteraes que fazemos, marcando as linhas inseridas como inseridas, modificadas como modificados e
excludos como excludos. Quando conclumos as alteraes, possvel chamar o DataAdapter
novamente para que ele execute para cada linha modificada o comando correspondente a modificao
realizada.

14.12 Criando um DataSet e um DataAdapter
Quando criamos um DataAdapter possvel informar uma query e uma conexo para a extrao
dos dados. O SqlCommand referente `a propriedade SelectCommand criado automaticamente.
Os outros comandos devem ser criados manualmente.
Um exemplo de criao de um objeto DataAdapter pode ser observado a seguir.
Linguagem de Programao C#

121

Cdigo 69: Criando um DataSet e um DataAdapter
SqlDataAdapter daProduct = new SqlDataAdapter("SELECT * FROM Products" ,
oConn );
SqlDataAdapter daOrders = new SqlDataAdapter ();
SqlCommand oCmd = new SqlCommand("SELECT * FROM Orders " , oConn);
daOrders.SelectCommand = new SqlCommand(oCmd );

14.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, 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 a
seguir.
Cdigo 70: Criando e preenchendo um DataSet
SqlDataAdapter daProduct = new SqlDataAdapter("SELECT * FROM Products",
oConn);
DataSet ds = new DataSet();
daProduct.Fill(ds ,"Products");

Linguagem de Programao C#

122

CAPTULO 15 Operaes CRUD com Entity Framework
Operaes CRUD (Create, Read, Update e Delete) so as operaes de inserir, alterar, excluir e
consultar dados em um banco de dados.
Para tanto, utilizarei um exemplo bem simples para proporcionar facilidade no entendimento do
framework, utilizando banco de dados SQL Server.
Crie um projeto em Visual Stdio 2008, salve-o no local dejado e com o nome que preferir.
Clique no menu Arquivo > Novo Projeto. Escolha o nome e o local que pretende salvar seu projeto.

Crie um banco de dados e nele uma tabela, conforme cdigo abaixo:
CREATE DATABASE CRUDC;
USE CRUDC;
CREATE TABLE PRODUTO
(
COD INT NOT NULL IDENTITY (1, 1) PRIMARY KEY,
NOME VARCHAR (50) NOT NULL,
VALOR MONEY NOT NULL CHECK (VALOR > 0)
);

Agora vamos criar o Modelo de Dados de Entidade para gerar o modelo de entidades mapeando os
campos da tabela para entidades que sero tratadas pelo Entity Framework.
Clique com o boto direito no nome de sua aplicao, escolha a opo Adicionar > Novo Item.
Em Categorias, escolha a opo Dados e na rea de Modelos a opo Modelo de Dados de
Entidade ADO .NET.
Linguagem de Programao C#

123


Seguindo o assistente selecione a opo Gerar a partir do banco de dados na prxima janela e
clique Avanar.
Selecione a seguir a conexo com o banco de dados CRUDC que foi criado no SQL Server e clique
em Prximo.

Linguagem de Programao C#

124

Na prxima janela selecione a tabela Produto e clique em Concluir;

Ao final teremos o modelo de entidades sendo representado pela entidade Produtos mapeada para
a tabela Produtos do nosso o banco de dados;

Linguagem de Programao C#

125

Aps esse procedimento j possvel criar as operaes de manipulao dos dados no banco de
dados. Agora, vamos definir os seguintes controles no formulrio form1.cs:
Label
lblCodigo
lblProduto
lblValor
TextBox
txtCodigo
txtProduto
txtValor
DataGridView
dtgProdutos
Button
cmdInserir
cmdAlterar
cmdExcluir

Conforme mostrado abaixo:

Vamos agora definir as operaes CRUD.
Leitura de Dados
Vamos criar aqui um mtodo para fazer a leitura dos dados e preench-los no objeto DataGridView.
private void lerProdutos()
{
CRUDCEntities contexto = new CRUDCEntities();
IEnumerable<PRODUTO> lista = from p in contexto.PRODUTO select p;
dtgProdutos.DataSource = lista.ToList();
}
O cdigo cria uma instncia do ObjectContext que foi criado no Entity Data Model e com ele temos
acesso as entidades e aos recursos do Entity Framework.
Linguagem de Programao C#

126

A seguir efetuamos uma consulta usando uma expresso LINQ para selecionar no contexto todos
os produtos mapeados para a entidade Produto. O retorno do tipo IEnumerable <Produto>, a seguir
exibimos o resultado no controle DataGridView.
A interface IEnumerable expe o enumerador que oferece suporte a iterao sobre a coleo do
tipo especificado que no caso a entidade Produto.
Executando o projeto iremos obter o formulrio exibindo os dados da tabela produtos no controle
DataGridView: dtgProdutos.

Inserindo Dados
Agora vamos inserir os dados digitados na tela pelo usurio no banco de dados. Este cdigo
dever ficar no boto cmdInserir.
private void cmdInserir_Click(object sender, EventArgs e)
{
CRUDCEntities contexto = new CRUDCEntities();
PRODUTO produto = new PRODUTO();
produto.NOME = txtProduto.Text.ToUpper();
produto.VALOR=Decimal.Parse(txtValor.Text.Substring(2,txtValor.Text.Length));
contexto.AddToPRODUTO(produto);
contexto.SaveChanges();
lerProdutos();
}
Para criar um novo produto, aps criar a instncia do Contexto, definimos uma nova entidade
Produto atribuindo os valores informados no formulrio para o nome do produto e para o cdigo da
categoria:
Depois usamos o mtodo AddToProduto para incluir o novo objeto Produto na coleo de objetos:
contexto.AddToProdutos (produto);
Na linha de cdigo contexto.AddToProduto (produto) o mtodo AddTo<EntityName>, que usado
pelo Entity Framework baseado nas entidades geradas a partir do banco de dados realizar a incluso do
novo objeto no contexto.
O cdigo do produto auto-incremental e controlado pelo gerenciado do banco de dados visto que
definimos o campo como identity.
Para persistir as informaes usamos o mtodo SaveChanges().

Alterando Dados
Agora vamos alterar os dados digitados na tela pelo usurio no banco de dados. Este cdigo
dever ficar no boto cmdAlterar
private void cmdAlterar_Click(object sender, EventArgs e)
{
CRUDCEntities contexto = new CRUDCEntities();
int cod = Int32.Parse(txtCodigo.Text);
PRODUTO produto = contexto.PRODUTO.First(p => p.COD == cod);
produto.NOME = txtProduto.Text.ToUpper();
produto.VALOR = decimal.Parse(txtValor.Text);
contexto.SaveChanges();
lerProdutos();
limpaCampos();
}
Aps criar o contexto obtemos o cdigo do produto informado na caixa de texto do formulrio.
A seguir usamos uma expresso lambda para retornar o produto desejado e realizarmos as
alteraes com base nas informaes do formulrio. Nesta consulta LINQ estamos usando o operador
First que retorna o primeiro elemento da sequencia que satisfaz o critrio definido na expresso lambda.
Linguagem de Programao C#

127

Apagando Dados
Agora vamos excluir os dados digitados na tela pelo usurio no banco de dados. Este cdigo
dever ficar no boto cmdExcluir.
private void cmdExcluir_Click(object sender, EventArgs e)
{
CRUDCEntities contexto = new CRUDCEntities();
int cod = Int32.Parse(txtCodigo.Text);
PRODUTO produto = contexto.PRODUTO.First(p => p.COD == cod);
contexto.DeleteObject(produto);
contexto.SaveChanges();
lerProdutos();
limpaCampos();
}

Aps criar o contexto obtemos o cdigo do produto informado na caixa de texto do formulrio.
A seguir usamos uma expresso lambda para retornar o produto a excluir.
Depois chamamos o mtodo DeleteObject() do contexto do objeto e passamos o objeto produto e
chamamos o mtodo SaveChanges para persistir as mudanas.
Agora vamos definir uma funcionalidade muito prtica no projeto: Permitir que quando o usurio
clicar no DataGridView o contedo da linha selecionada seja exibida nos controles TextBox do formulrio;
Para fazer isso vamos usar o evento CellContentClick do controle DataGridView e nele inserir o
cdigo abaixo:

private void dtgProdutos_CellContentClick(object sender,
DataGridViewCellEventArgs e)
{
txtCodigo.Text = dtgProdutos.CurrentRow.Cells[0].Value.ToString();
txtProduto.Text = dtgProdutos.CurrentRow.Cells[1].Value.ToString();
txtValor.Text = dtgProdutos.CurrentRow.Cells[2].Value.ToString();
}

Linguagem de Programao C#

128

CAPTULO 16 - Conexo C# com o MYSQL
Quem est habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma
vez que ela est integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com
as duas ferramentas.
Por vezes existem projetos em que se torna conveniente (por vrias razes) utilizar outro tipo de
base de dados. Seja que banco de dados for, a sua integrao sempre diferente do SQL Server.
Neste caso, mostraremos como fazer a integrao entre o C# e o MySQL.
Supondo que j existe uma instalao do MySQL na mquina, precisamos instalar um componente
intermedirio entre o C# e a base de dados. Neste caso necessitamos instalar o MySQL Connector NET.
Download no link http://dev.mysql.com/downloads/connector/net/6.0.html
A partir da verso 5.0 j existe suporte ao Visual Studio 2008, mas vamos utilizar a ltima verso
(6.0).
Instale o Connector Net 6.0.
Devemos j ter uma base de dados com uma tabela (users por exemplo), em que os campos da
tabela so: id, nome, email.
Como exemplo criamos um projecto Windows Forms Application.
Antes de mais nada, devemos fazer uma referncia classe que vai ligar o C# ao MySQL. Para
isso vamos ao painel Solution Explorer, na raiz do projeto, clicamos com o lado direito do mouse e
selecionamos Add Reference.

Na primeira divisria (.NET) selecionamos a referncia MySQL.Data e damos OK.
No esquecer: incluir no incio do cdigo as classes:
using System.Data;
using MySql.Data.MySqlClient;

Linguagem de Programao C#

129

Sem adicionar a referncia MySQL.Data, a classe MySql.Data.MySqlClient no ser reconhecida.
Para exemplificar fazemos um formulrio de insero de dados (nome e e-mail) na base de dados.
No form colocamos duas caixas de texto, uma para o nome (txtNome) e outra para o e-mail (txtMail)
e um boto que ter a ao de inserir os dados na base de dados.

Vamos ento definir, em primeiro lugar, o dataset e a string de conexo base de dados.
private MySqlConnection bdConn; //MySQL
private MySqlDataAdapter bdAdapter;
private DataSet bdDataSet; //MySQL
Na ao do boto:
//Definio do dataset
bdDataSet = new DataSet();
//Define string de conexo
bdConn = new
MySqlConnection("PersistSecurityInfo=False;server=localhost;database=Aula;uid=root;pwd=
''");

Neste caso a base de dados no tem password.
//Abre coneco
try
{
bdConn.Open();
//Se estiver aberta insere os dados na BD
MySqlCommand commS = new MySqlCommand("INSERT INTO Agenda (Nome, Email, Fone)
VALUES('"+txtNome.Text + "','" + txtMail.Text + "','"+txtFone.Text+"')", bdConn);
commS.BeginExecuteNonQuery();
}
catch
{
MessageBox.Show("Impossvel estabelecer conexo");
}
Linguagem de Programao C#

130

Exemplo de Consulta:
Como exemplo criamos um projecto Windows Forms Application.
Antes de mais nada, devemos fazer uma referncia classe que vai ligar o C# ao MySQL. Para
isso vamos ao painel Solution Explorer, na raiz do projeto, clicamos com o lado direito do mouse e
selecionamos Add Reference.

Na primeira divisria (.NET) selecionamos a referncia MySQL.Data e damos OK.
No esquecer: incluir no incio do cdigo as classes:
using System.Data;
using MySql.Data.MySqlClient;

Sem adicionar a referncia MySQL.Data, a classe MySql.Data.MySqlClient no ser reconhecida.
Vamos ento definir, em primeiro lugar, o dataset e a string de conexo base de dados.
private MySqlConnection mConn; //MySQL
private MySqlDataAdapter mAdapter;
private DataSet mDataSet; //MySQL


Linguagem de Programao C#

131

Adicionar o DataGridView no formulrio. Na ao do boto:
mDataSet = new DataSet();
mConn = new
MySqlConnection("PersistSecurityInfo=False;server=localhost;database=Aula;uid=root;pwd=
''");
try
{
mConn.Open();
mAdapter = new MySqlDataAdapter("Select * from Agenda",mConn);
mAdapter.Fill(mDataSet,"Agenda");
dataGridView1.DataSource = mDataSet;
dataGridView1.DataMember = "Agenda";
}
catch
{
MessageBox.Show("Impossvel estabelecer conexo");
}

Figura 1 - Exemplo de Conexo
16.1 Insero de dados em MySQL
Demonstraremos como efetuar ligaes entre o C# e bases de dados para inserir dados numa base
de dados MySQL. Apesar de a ligao C# MySQL no ser a mais utilizada, visto que o C# uma
linguagem mais orientada para o ambiente Windows, e o MySQL orientado para a Web, veremos que no
existe nenhum segredo, e at bastante simples a insero de dados.
Antes de comear a ler este tutorial, muito importante que tenha compreendido o captulo anterior
relacionado com este tema (C# Conexo a Base de Dados MySQL), visto que os primeiros passos so
iguais.
Primeiro criamos uma base de dados no phpMyAdmin. Neste caso criei a base de dados com o
nome pplware_bd.
Esta base de dados, ter uma tabela com o nome tabela_dados, com trs campos:
- id (INT (5), AUTO_INCREMENT, Chave Primria)
- titulo (VARCHAR(25))
- descricao (VARCHAR(100))
Linguagem de Programao C#

132

Para que seja possvel inserir dados numa base de dados MySQL em C#, necessrio adicionar a
referncia MySql.Data. Para isso necessrio efetuar o download do mysql-connector-net-6.X.X. Depois
s executar o setup. (No fim necessrio reiniciar o Visual Studio).
Para adicionar uma referncia:
- Clicar com o boto direito em Referncia e fazer Add Reference.

- Selecionar na lista MySQL.Data no separador .NET

- Como a referncia j est adicionada, temos de a inserir no cdigo.
using MySql.Data.MySqlClient;
Agora vamos ao cdigo
1 Temos de adicionar um MySqlConnection, MySqlDataAdapter e um DataSet.
private MySqlConnection mConn;
private MySqlDataAdapter mAdapter;
private DataSet mDataSet;
O MySqlConnection, MySqlDataAdapter e o DataSet, so necessrios para a conexo e leitura
da base de dados.

Linguagem de Programao C#

133

2 Criar o layout da mini aplicao.

3 Cdigo do boto Gravar
private void bt_Gravar_Click(object sender, EventArgs e)
{
// Incio da Conexo com indicao de qual o servidor, nome de base de dados e
utilizar

/* aconselhvel criar um utilizador com password. Para acrescentar a password
somente
necessrio acrescentar o seguinte cdigo a seguir ao uid=root;password=xxxxx*/

mConn = new MySqlConnection("Persist Security Info=False;
server=localhost;database=pplware_bd;uid=root");

// Abre a conexo
mConn.Open();

//Query SQL
MySqlCommand command = new MySqlCommand("INSERT INTO tabela_dados
(titulo,descricao)"+
"VALUES('" + tb_titulo.Text + "','" + tb_descricao.Text + "')", mConn);
//Executa a Query SQL
command.ExecuteNonQuery();
// Fecha a conexo
mConn.Close();
//Mensagem de Sucesso
MessageBox.Show("Gravado com
Sucesso!","Informao",MessageBoxButtons.OK,MessageBoxIcon.Information);
// Mtodo criado para que quando o registo gravado, automaticamente a
dataGridView efectue um "Refresh"
mostraResultados();
}
Linguagem de Programao C#

134

4 Cdigo do mtodo de visualizao de dados
private void mostraResultados()
{
mDataSet = new DataSet();
mConn = new MySqlConnection("Persist Security Info=False;
server=localhost;database=pplware_bd;uid=root");
mConn.Open();
//cria um adapter utilizando a instruo SQL para aceder tabela
mAdapter = new MySqlDataAdapter("SELECT * FROM tabela_dados ORDER BY id", mConn);
//preenche o dataset atravs do adapter
mAdapter.Fill(mDataSet, "tabela_dados");
//atribui o resultado propriedade DataSource da dataGridView
dataGridView1.DataSource = mDataSet;
dataGridView1.DataMember = "tabela_dados";
}
Este mtodo ser chamado no boto Visualizar, como exemplificado na imagem abaixo.
private void bt_visualizar_Click(object sender, EventArgs e)
{
mostraResultados();
}
E o resultado ser:

Linguagem de Programao C#

135



Linguagem de Programao C#

136

CAPTULO 17 - Gerando um Executvel a partir de um Windows
Forms
Neste captulo mostraremos como simples e rpido gerar um executvel de sua aplicao
Windows Forms, para depois gravar num CD ou copiar para um Pendrive, e execut-lo no cliente, na
casa de um amigo, disponibilizar na internet,e etc.
Neste exemplo usaremos um projeto feito em laboratrio, o Clculo de Mdia.
Ento, com o projeto aberto abra a Solution Explorer (CTRL + W + S), clique com o boto direito
em cima do seu projeto e clique em Publish para que seja aberto o Wizard do Visual Studio.

Na tela que abre, clique em Browse e selecione uma pasta em que ser gerado o instalador ou crie
uma se for necessrio. Aps isso, clique em Next.

Linguagem de Programao C#

137

Agora o Wizard ir perguntar como os usurios instalaro sua aplicao, deixe selecionada a
terceira opo: From a CD-ROM ou DVD-ROM e clique em Next.

Na prxima tela o Wizard ir perguntar se a aplicao ir procurar por atualizaes. Deixe
selecionada a segunda opo: The application will not check for updates e clique em Next.

Linguagem de Programao C#

138

Ser exibida uma tela avisando que quando o executvel for instalado na mquina do cliente, ser
gerado um atalho no menu Iniciar e a opo de Desinstalar o Aplicativo no Adicionar/Remover
Programas, do Painel de Controle.
Clique em Finish e aguarde o Wizard gerar seu instalador.

Quando terminar, ser mostrada abaixo no canto esquerdo a mensagem Publish Suceeded.

Se seu browser abrir tentando carregar o executvel e der erro, ignore.
Agora v na pasta em que foi gerado o executvel e d dois cliques no arquivo Setup.exe. Na tela
que aparece, clique em Install:


Linguagem de Programao C#

139

Seu programa dever ser executado:

Simples, no ? Note que se voc for ao menu Iniciar e em Todos os programas ver que foi
criado um atalho para seu programa:

Da mesma forma se voc for ao Painel de Controle, clicar em Adicionar ou remover programas,
ver que tem uma opo para desinstalar o aplicativo:

Pronto, s gravar em um CD ou mesmo passar pro Pendrive o Setup.exe e distribuir pros amigos
ou mesmo instalar no cliente!
Referncias
SANTOS, Luis Carlos. Microsoft Visual C# Express Edition 2008. Editora rica. 1 edio. 2009.
MORONI, Herbert. Treinamento Profissional em C#.net. Digerati Books. 2006.