Você está na página 1de 62

1

Linguagem C#
E S COL A
Linguagem de
Programao I
(linguagem C#)
2
Escola Alcides Maya - Segundo Mdulo
1 INTRODUO
Em Junho de 2000 a Microsoft anunciou a Plataforma .NET e uma nova linguagem de programao chamada C# (se l
C Sharp). C# uma linguagem fortemente tipada e orientada a objetos projetada para oferecer a melhor combinao de
simplicidade, expressividade e performance.
A linguagem C# aproveita conceitos de muitas outras linguagens, mas especialmente de C++ e Java. Ela foi criada por
Anders Hejlsberg (que j era famoso por ter criado o TurboPascal e o Delphi para a Borland) e Scott Wiltamuth.
A Plataforma .NET centrada ao redor de uma Common Language Runtime (CLR, conceito similar ao da Java Virtual
Machine, JVM) e um conjunto de bibliotecas que pode ser empregado em uma grande variedade de linguagens, as quais
podem trabalhar juntas, j que todas so compiladas para uma mesma linguagem intermediria, a Microsoft Internediate
Language (MSIL). Assim, possvel desenvolver aplicativos mesclando C# e Visual Basic ou qualquer outra linguagem
suportada.
A sintaxe utilizada pelo C# relativamente fcil, o que diminui o tempo de aprendizado. Todos os programas desenvolvidos
devem ser compilados, gerando um arquivo com a extenso DLL ou EXE. Isso torna a execuo dos programas mais rpida
se comparados com as linguagens de script (VBScript , JavaScript) que atualmente utilizamos na internet.
Poderamos citar entre algumas das principais caractersticas do C#:
Orientada a Objetos
No h variveis ou funes globais. Todos os mtodos e atributos devem ser declarados dentro de classes. Atributos
e mtodos estticos de classes pblicas podem servir como substitutos para variveis e mtodos globais.
Apontadores
Em C#, apontadores s podem ser usados dentro de blocos especifcamente marcados como inseguros. Programas
com cdigo inseguro precisam das permisses apropriadas para serem executados.
Memria Gerenciada
Em C# a memria no precisa ser explicitamente liberada. Ao invs disso ela automaticamente gerenciada por
meio do Garbage Collector (coletor de lixo), que constantemente percore a memria alocada para verifcar se ela ainda
necessria, eliminando assim o risco de vazamentos de memria.
Tipagem Forte
C# mais fortemente tipada do que C++: as nica converses implcitas por default so aquelas que so consideradas
seguras, como por exemplo o armazenamento de um inteiro em um tipo de dados maior ou a converso de um tipo derivado
para um tipo base. No h converso implcita entre booleanos e inteiros.
3
Linguagem C#
2 O AMBIENTE DE DESENVOLVIMENTO
O ambiente de desenvolvimento do C#, Microsoft Visual Studio, implementa o conceito de RAD (Rapid Application
Development), oferecendo ferramentas para a construo rpida de aplicativos, ao mesmo tempo que oferece um excelente
designer de telas e debugger integrado.
Entre os diversos recursos do ambiente podemos destacar:
O Editor de Cdigo (Code Editor), usado para manipular o cdigo fonte;
O Compilador C# (C# Compiler), utilizado para converter o cdigo fonte em um programa executvel;
O Depurador do Visual Studio (Visual Studio Debugger), usado para testar seus programas;
A Caixa de Ferramentas (Toolbox) e o Editor de Formulrios (Windows Forms Designer), para a rpida criao de
interfaces com o usurio usando o mouse;
O Explorador de Solues (Solution Explorer), til para o gerenciamento de arquivos de projeto e confguraes;
O Editor de Projetos (Project Designer), usado para confgurar o compilador, caminhos de instalao e demais
recursos;
O Visualizador de Classes (Class View), usado para navegar atravs das classes defnidas no seu cdigo fonte;
A Janela de Propriedades (Properties Window), utilizada para defnir as propriedades e eventos nos controles da sua
interface com o usurio;
O Navegador de Objetos (Object Browser), que pode ser usado para ver os mtodos e classes disponveis em
bibliotecas externas (arquivos DLL, por exemplo), inclusive os objetos do Framework .NET;
O Explorador de Documentos (Document Explorer), que navega atravs da documentao do produto em seu
computador local ou na Internet.
Ilustrao 1- Tela Inicial do Visual Studio 2008
4
Escola Alcides Maya - Segundo Mdulo
Ambiente de Desenvolvimento IDE Visual Studio 2008.
3 CRIANDO UMA APLICAO NO VISUAL STUDIO 2008
No ambiente Visual Studio tomamos por base o conceito de Projetos. Cada Projeto pode ser baseado em qualquer um
dos tipos de aplicaes disponveis, como por exemplo: WindowsFormsAplication, ConsoleAplication, ClassLibrary e vrias
outras.
Quando voc clicar nas opes File > New Project... ir surgir uma nova janela onde voc poder escolher o tipo de
aplicao a ser criada:
Ilustrao 2 - Tela Incio de um novo Projeto
5
Linguagem C#
4 O SEU PRIMEIRO PROGRAMA EM C#
Nosso primeiro programa em C# extremamente simples. O programa deve exibir na tela a mensagem Ol Mundo !.
Para comear, clique em File > New Project... e selecione o tipo Console Application. Na mesma caixa de dilogos, altere
o nome sugerido para OlaMundo e clique em OK.
A seguir, use o editor de textos para alterar o cdigo do programa criado automaticamente para voc e adicione as linhas
mostradas em negrito abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OlaMundo
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(Ol Mundo!);
System.Console.ReadKey;
}
}
Uma vez completada a digitao, clique em File > Save All (ou pressione Ctrl-Shift-S) para salvar o seu projeto e todos
os arquivos criados.
Depois, para compilar o programa, clique em Build > Build Solution (ou pressione F6). Por fm, para execut-lo, clique
em Debug > Start Without Debugging (ou pressione Ctrl-F5). Pronto, voc ver a mensagem escrita na tela. Pressione
qualquer tecla para concluir o programa.
5 O BSICO SOBRE O C#
Todas as instrues devem estas entre chaves e sempre ser fnalizadas com um ponto-e-vrgula, como voc ver a
seguir:
{
// Cdigo.
}
5.1 COMENTRIOS
Usamos comentrios para descrever partes complexas de cdigo, a fm de facilitar a manuteno, seja para quem elaborou o
software, seja para terceiros. Comentrios no so interpretados pelo compilador. Em C# existem dois tipos de comentrios:
Barras duplas: convertem o restante da linha em comentrios.
6
Escola Alcides Maya - Segundo Mdulo
// Nosso primeiro programa em C#.
Blocos de Texto: os caracteres /* e */ defnem blocos de textos como comentrios.
/* Este o meu primeiro contato com C#.
Espero que aprenda rpido est nova linguagem.
Obrigado. */
5.2 MTODO MAIN
Um programa C# deve conter um mtodo especial chamado Main. Este o primeiro mtodo chamado quando se executa
uma aplicao em C#, e a partir dele que voc criar objetos e executar outros mtodos.
static void Main()
{
// Cdigo.
}
Ou retornar um valor inteiro (int):
static int Main()
{
// Cdigo.
Return 0;
}
O mtodo Main tambm pode receber parmetros, por meio de um array de strings.
static void Main(string[] args)
{
// Cdigo.
}
Ou
static int Main(string[] args)
{
// Cdigo.
Return 0;
}
7
Linguagem C#
5.3 ENTRADA E SADA BSICA
A entrada e sada de um programa C# realizado pela biblioteca de classes do .NET Framework. Entre as classes
presentes nesta biblioteca podemos citar a classe System.Console, que pode ser usada para escrever na tela e obter dados do
teclado.
5.3.1 IMPRIMINDO NA TELA
Imprimir na Tela em C# uma atividade bastante simples. Para imprimir basta chamar o mtodo System.Console.
WriteLine(). Veja o exemplo:
System.Console.WriteLine(Ol, Mundo!);
Esta linha imprime a mensagem mostrada abaixo:
Ol, Mundo!
5.3.2 LENDO DO TECLADO
Ler dados a partir do teclado pode ser um pouco mais complicado, pois h mais opes e por vezes vamos precisar nos
preocupar com as converses de dados (veja mais sobre isso mais adiante). Mas por enquanto vamos nos ater ao bsico.
5.3.3 ESPERANDO POR UMA TECLA
Por vezes voc quer apenas que o usurio pressione uma tecla qualquer antes que o programa proceda com uma dada
tarefa. Isso simples de fazer, conforme vemos abaixo:
System.Console.ReadKey();
O mtodo acima retorna informaes sobre a tecla pressionada, mas por enquanto vamos ignorar isto, pois por ora no
nos interessa saber qual foi. Veremos mais sobre isso mais tarde.
5.3.4 LENDO DADOS A PARTIR DO TECLADO
Em outras situaes iremos querer que o usurio nos d alguma informao. A maneira mais fcil de se fazer isso ler
uma linha a partir do teclado, como mostra o exemplo:
string nome = System.Console.ReadLine();
O que quer que o usurio digitasse seria armazenado na varivel chamada nome (veja mais sobre variveis na prxima
seo).
Por vezes ser necessrio converter o texto que o usurio digitou para um outro tipo de dados, ento a que entram as
converses de tipos de dados. Veja mais sobre tipos de dados e converses na prxima seo.
8
Escola Alcides Maya - Segundo Mdulo
6 VARIVEIS E TIPOS DE DADOS
6.1 VARIVEIS
As variveis so utilizadas para armazenar informaes na memria do computador enquanto o programa C# esta sendo
executado. As informaes contidas nas variveis podem ser alteradas durante a execuo do programa.
As variveis devem possuir um nome para que possamos nos referenciar a elas mais tarde. Ao nomear uma varivel
devemos observar as seguintes restries:
O nome deve comear com uma letra ou _ .
No so permitidos espaos, pontos ou outros caracteres de pontuao, mas podemos usar nmeros.
O nome no pode ser uma palavra reservada do C#.
O nome deve ser nico dentro do contexto atual.
Alm do nome, devemos tambm defnir o tipo de dados e o escopo (local onde a varivel estar acessvel). O escopo
defnido pelos modifcadores de acesso (veremos mais sobre isso mais tarde)
Para declarar uma varivel, primeiro voc precisa indicar o seu tipo e depois o seu nome. Veja os exemplos:
string nome;
int telefone;
6.2 TIPOS DE DADOS
Como toda a linguagem de programao o C# 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
codifcao na defnio de variveis, parmetros, declaraes e at mesmo em comparaes.
Em C# todo o tipo de dados possui um correspondente na CLR (Common Language Runtime), por exemplo: int em C#
refere-se a System.Int32 na plataforma .NET.
Tipo C# Tipo .NET Descrio Faixa de dados
bool System.Boolean Booleano true ou false
byte System.Byte Inteiro de 8-bit com sinal -127 a 128
char System.Char Caracter Unicode de 16-bit U+0000 a U+ffff
decimal System.Decimal Inteiro de 96-bit com sinal com
28-29 dgitos
1,0 10-28 a 7,9 1028
double System.Double Flutuante IEEE 64-bit com 15-
16 dgitos signifcativos
5,0 10-324 a 1,7 10308
foat System.Single Flutuante IEEE 32-bit com 7
dgitos signifcativos
1,5 10-45 a 3,4 1038
int System.Int32 Inteiro de 32-bit com sinal -2.147.483.648 a 2.147.483.647
long System.Int64 Inteiro de 64-bit com sinal 9,223,372,036,854,775,808 a
9,223,372,036,854,775,807
Object System.Object Classe base
Sbyte System.Sbyte Inteiro de 8-bit sem sinal 0 a 255
Short System.Int16 Inteiro de 16-bit com sinal -32,768 a 32,767
String System.String String de caracteres Unicode
Uint System.UInt32 Inteiro de 32-bit sem sinal 0 a 4,294,967,295
Ulong System.UInt64 Inteiro de 64-bit sem sinal 0 a 18,446,744,073,709,551,615
Ushort System.UInt16 Inteiro de 16-bit sem sinal 0 a 65,535
9
Linguagem C#
6.3 CONVERSES DE TIPOS
Uma tarefa muito comum no mundo da programao a utilizao de converses. Por exemplo: podemos converter um
inteiro para um longo. Quando o usurio digita um nmero qualquer numa TextBox, necessria uma converso de valores
antes que um clculo possa ser realizado.
Mtodo Descrio
System,Convert.ToBoolean() Converte uma string para um valor booleano
System,Convert.ToByte() Converte para o tipo byte
System,Convert.ToChar() Converte para o tipo char
System,Convert.ToDateTime() Converte para o tipo data e hora
System,Convert.ToDecimal() Converte para o tipo decimal
System,Convert.ToDouble() Converte para o tipo doubl
System,Convert.ToInt16() Converte para o tipo short
System,Convert.ToInt32() Converte para o tipo inteiro
System,Convert.ToInt64() Converte para o tipo long
System,Convert.ToSingle() Converte para o tipo single
System,Convert.ToString() Converte para o tipo string
Alguns tipos so convertidos automaticamente se o valor que receber a converso puder conter todos os valores da
expresso. A tabela a seguir mostra as converses que so realizadas automaticamente.
De Para
sbyte short, int, long, foat, double ou decimal
byte short, ushort, int, uint, long, foat, double ou decimal
short int, long, foat, double ou decimal
ushort int, uint, long, ulong, foat, double ou decimal
int long, foat, double ou decimal
uint long, ulong, foat, double ou decimal
long foat, double ou decimal
ulong foat, double ou decimal
char ushort, int, uint, long, ulong, foat, double ou decimal
foat double
7 ARRAYS
Array uma coleo de elementos armazenados em seqncia, acessveis atravs de um ndice numrico. No C#, o
primeiro elemento de um array o de ndice zero (0).
importante notar que podemos criar arrays com uma ou mais dimenses.
Para defnir um array voc seguir esta estrutura:
<tipo-de-dados> [] <nome-do-array> = new <tipo-de-dados>[<tamanho>];
7.1 ARRAYS DE DIMENSO NICA
Voc pode criar um array e no inicializ-lo:
string[] arr;
10
Escola Alcides Maya - Segundo Mdulo
No entanto, para utiliz-lo em outras partes do cdigo, precisamos inicializ-lo. Por exemplo, para inicializarmos o array
anterior com 10 elementos:
arr = new string[10];
Para armazenar informaes num array use o ndice para indicar o elemento desejado:
arr[0] = Alfredo;
arr[1] = Maria;
arr[2] = Paulo;
arr[8] = Beatriz;
Entretanto, podemos inicializ-lo, junto com a declarao:
arr = new string[4] {Alfredo, Maria, Paulo, Beatriz};
Podemos tambm omitir o nmero de elementos:
int [] numeros = {1, 2, 3, 4, 5};
string [] nomes = {Alfredo, Maria, Paulo, Beatriz};
Para acessar um elemento de um array voc deve usar o ndice do elemento desejado, lembrando que os ndices comeam
sempre eo zero. Por exemplo, para acessar o segundo elemento do array nomes voc usaria a seguinte instruo:
string saida = arr [1]; // Isto armazenaria Maria na
// varivel saida
7.2 ARRAYS MULTIDIMENSIONAIS
Num array multidimensional separamos as dimenses por vrgulas.
Para declar-lo com duas dimenses, use:
int [ , ] arr;
Para declar-lo com trs dimenses, use:
int [ , , ] arr;
11
Linguagem C#
Exemplos:
int [,] numeros = new int [3, 2] {{1, 2}, {3, 4}, {5, 6} };
string [,] nomes = new string [2, 2] {{Mara, Lotar}, {Mary, Jos} };
Essas linhas poderiam ser representadas por:
numeros [0, 0] = 1;
numeros [0, 1] = 2;
numeros [1, 0] = 3;
numeros [1, 1] = 4;
numeros [2, 0] = 5;
numeros [2, 1] = 6;
E por:
nomes [0, 0] = Mara;
nomes [0, 1] = Mary;
nomes [1, 0] = Lotar;
nomes [1, 1] = Jos;
8 EXPRESSES
Um programa no ser muito til se no pudermos us-lo para efetuar clculos ou outro tipo de manipulaes de dados.
para isso que surgem os operadores.
Conforme veremos a seguir, existem diferentes tipos de operadores, dependendo do tipo de operao que desejamos
realizar.
Categoria Operadores
Aritmtica + - * / %
Lgica (boolena e bitwise) & | ^ ! ~ && || true false
Concatenao de string +
Incremento e decremento ++ --
Shift << >>
Relacional == != < > <= >=
Atribuio = += -= *= /= %= &= |= ^= <<=
>>=
Acesso a membro .
Indexao []
Cast ()
Condicional ?:
Delegate (concatenao e remoo) + -
Criao de objeto new
Informao de tipo is sizeof typeof
Controle de excesso de overfow checked unchecked
Indireo e endereo * -> [] &
12
Escola Alcides Maya - Segundo Mdulo
9 ESTRUTURAS DE CONTROLE
Uma instruo de controle usada para controlar a execuo de partes de um programa. Sem as instrues de controle
um programa seria executado da primeira ltima linha. Isso pode ser algo que no queremos em situaes nas quais uma
instruo deve ser executada somente se determina condio for verdadeira. As instrues de controle utilizadas no C# so
if, switch e else if.
9.1 ESTRUTURAS DE DECISO
INSTRUO IF
A instruo if pode ser usada para seletivamente executar trechos de cdigo. Voc pode executar um cdgo apenas se
uma dada condio for verdadeira ou falsa. Veja o exemplo:
if (<condio>)
{
// Cdigo para quando a condio for verdadeira.
}
Existe ainda a possibilidade de se usar a clusula opcional else, que inverte a condio testada. Seu corpo ser executado
se a condio no for verdadeira.
if (<condio>)
{
// Cdigo para quando a condio for verdadeira.
}
else
{
// Cdigo para quando a condio for falsa.
}
Se a condio for satisfeita, todas as instrues do primeiro bloco de comando sero executadas; no entanto, se a condio
no for satisfeita, sero executadas as instrues do segundo bloco.
int numero = 3;
if (numero % 2 == 0)
{
System.Console.WriteLine(O nmero par.);
}
else
{
System.Console.WriteLine(O nmero mpar.);
}
13
Linguagem C#
9.1.1 EXERCCIO DE SALA DE AULA
Crie um novo Projeto do tipo Console Aplicattion e nomei-o como EstruturaDeControle1.
Renomeie o arquivo Program.cs para TestandoDoisValores.cs.
O objetivo do nosso programa receber dois valores e indicar qual deles o maior.
Para tanto, insira o cdigo marcado em negrito abaixo dentro do mtodo principal Main().
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EstruturaDeControle1
{
class TestandoDoisValores
{
static void Main(string[] args)
{
// Testando o maior valor entre dois valores
int num1, num2;
Console.WriteLine(Digite o primeiro valor: );
num1 = int.Parse(Console.ReadLine());
Console.WriteLine(Digite o segundo valor: );
num2 = int.Parse(Console.ReadLine());
if (num1 > num2)
{
Console.WriteLine(O maior nmero + num1);
}
else
{
Console.WriteLine(O maior nmero + num2);
}
Console.ReadKey();
}
}
}
14
Escola Alcides Maya - Segundo Mdulo
9.1.2 EXERCCIOS DE FIXAO
Crie um programa que leia nome e idade de trs pessoas, informando qual delas a mais velha. Trabalhe com valores
inteiros.
Solicite que o usurio informe um valor e verifque se o mesmo par ou mpar.
Solicite que o usurio informe um valor inteiro e verifque se o mesmo negativo, zero ou positivo.
Solicite que o usurio informe o nome e trs notas de um aluno (com valores entre 1.0 a 10.0), calcule a sua mdia
e teste as seguintes condies: se a mdia for menor ou igual a 5.0 exiba a mensagem Reprovado; se for menor ou igual a
7.0 exiba a mensagem Atingiu a mdia; se for menor ou igual a 8.9 exiba Muito Bom; se maior ou igual a 9.0, mostrar
Excelente.
9.2 INSTRUO SWITCH
A instruo switch permite a execuo condicional de instrues de acordo com o valor de um argumento teste, o qual
pode ser uma varivel, uma expresso numrica, uma string ou funes.
switch (<argumento-de-teste>)
{
case <expresso-1>:
// Cdigo para quando argumento-de-teste = expresso-1.
break;
case <expresso-2>:
// Cdigo para quando argumento-de-teste = expresso-2.
break;
case <expresso-3>:
// Cdigo para quando argumento-de-teste = expresso-3.
break;
...
default:
// Cdigo para quando nenhum teste foi satisfeito.
break;
}
9.2.1 EXERCCIO DE SALA DE AULA
Crie um novo Projeto do tipo Console Aplicattion com o nome de: ExemploSwitch.
Clique na classe padro Program.cs e renomeie-a para ExemploSwicth.cs.
Logo em seguida, edite a mesma inserindo o cdigo marcado em negrito abaixo dentro do mtodo principal Main(),
O objetivo do programa simular uma calculadora. Ele receber dois valores e um operador, executar a operao e
mostrar o resultado na tela.
15
Linguagem C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ExemploSwitch
{
class ExemploSwitch
{
static void Main(string[] args)
{
double valor1, valor2, resultado;
string operador;
Console.WriteLine(Digite o primeiro valor: );
valor1 = double.Parse(Console.ReadLine());
Console.WriteLine(Digite o segundo valor: );
valor2 = double.Parse(Console.ReadLine());
Console.WriteLine(Escolha a operao(+, -, *, /): );
operador = Console.ReadLine();
switch (operador)
{
case +:
resultado = valor1 + valor2;
Console.WriteLine(O resultado da soma : +
resultado);
break;
case -:
resultado = valor2 - valor1;
Console.WriteLine(O resultado da subtrao : +
resultado);
break;
case *:
resultado = valor1 * valor2;
Console.WriteLine(O resultado da multiplicao : +
resultado);
break;
case /:
resultado = valor1 / valor2;
Console.WriteLine(O resultado da diviso : +
resultado);
break;
default :
break;
}
Console.ReadKey();
}
}
}
16
Escola Alcides Maya - Segundo Mdulo
9.2.2 EXERCCIO DE FIXAO
Usando a estrutura de condio Swicth, faa um programa que receba um valor e exiba sua descrio conforme
abaixo:
C para casado,
S para solteiro,
D para divorciado,
V para viuvo
10 LOOPS
Os laos (loops) nos permitem executar tarefas de forma repetitiva dentro de um bloco de cdigo. O C# possui trs tipos
de loops: loops contadores, loops codicionais e loops enumeradores.
10.1 INSTRUO FOR
Loops contadores executam uma tarefa um determinado nmero de vezes. A instruo for pode ser caracterizada como
sendo loop contador, pois conhecemos os extremos que devem ser percorridos pelo bloco for.
for (<inicializao>; <teste>; <incremento>)
{
// Cdigo a ser executado enquanto o teste for
// verdadeiro.
}
Parmetro Descrio
inicializao Inicializa a varivel de controle, usada para contar as execues do loop.
teste Teste que decide se o corpo do loop deve ou no ser executado.
incremento Incrementa (ou decrementa) a varivel de controle, preparando-a para a prxima
execuo do loop.
10.1.1 EXERCCIOS DE SALA DE AULA
Usando a estrutura de repetio for devemos criar um programa que imprima na tela os nmeros de 1 a 10.
Crie um novo projeto do tipo Console Aplicattion com o nome de EstruturaDeForI, e em seguida renomeie a classe
Program.cs para ContarDezNumeros.
Ento, dentro do mtodo principal Main(), codifque conforme exemplo mostrado
abaixo.
17
Linguagem C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EstruturaDeForI
{
class ContarDezNumeros
{
static void Main(string[] args)
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
Console.ReadKey();
}
}
}
Usando a estrutura de repetio For vamos navegar e mostrar valores de um array de 5 posies.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PercorrendoArray
{
class PercorrerArray
{
static void Main(string[] args)
{
string[] nome = new string[5];
nome[0] = Rosa;
nome[1] = Marcus;
nome[2] = Ricardo;
nome[3] = Pablo;
nome[4] = Maria;
for (int i = 0; i < nome.Length; i++)
{
Console.WriteLine(nome[i]);
}
Console.ReadKey();
}
}
}
18
Escola Alcides Maya - Segundo Mdulo
10.1.2 EXERCCIOS DE FIXAO
Crie um Array[10], pea para o usurio digitar valores do tipo string para preencher as 10 posies e em seguida
percorra o mesmo mostrando todos os valores digitados.
Crie um Array[5], pea para o usurio digitar valores inteiros para preencher as 5 posies e em seguida mostre
somente o valor da posio [3].
Instruo while
A instruo while executa os comandos dentro do loop enquanto a condio que lhe serve como parmetro for verdadeira.
Sintaxe de instruo while:
while (<condio>)
{
// Cdigo a ser executado enquanto a condio for
// verdadeira.
}
Se a condio for verdadeira as instrues colocadas dentro do bloco {} sero executadas, e o programa volta para o
incio do loop e novamente avaliar a condio. Logo que a condio se torna falsa, o programa passa a executar as instrues
colocadas aps as chaves (}).
Um loop while ou do pode ser encerrado pelas palavras-chave break, goto, return ou throw. A palavra-chave continue
tambm pode ser usada.
10.1.3 EXERCCIOS DE SALA DE AULA
Para demonstrar o funcionamento da estrutura de lao while, o exemplo abaixo mostra como devemos fazer para imprimir
na tela dez valores, iniciando pelo 1 at o 10.
Crie um novo projeto do tipo Console Aplicattion com o nome de Estruturawhile, e em seguida renomeie a classe
Program.cs para MostrarValores.cs. Por fm, insira o cdigo marcado em negrito abaixo no mtodo Main().
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EstruturaWhile
{
class MostrarValores
{
static void Main(string[] args)
{
int i = 1;
while (i <= 10)
{
Console.WriteLine(i);
i++;
}
Console.ReadKey();
}
}
}
Usando uma estrutura de lao while vamos criar um programa que leia a entrada somente de 5 valores.
19
Linguagem C#
Crie um novo projeto do tipo Console Aplicattion, com o nome de EstruturaDeLacoI.
Renomear a classe Principal Program.cs para MostrandoCincoValores.
Declare as possiveis variveis, e estruture o cdigo dentro do mtodo principal Main().
Siga o exemplo abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EstruturaDeLacoI
{
class MostrandoCincoValores
{
static void Main(string[] args)
{
int num;
int contador = 1;
while (contador <= 5)
{
Console.WriteLine(Digite um nmero: );
num = int.Parse(Console.ReadLine());
contador++;
}
Console.ReadKey();
}
}
}
10.1.4 EXERCCIOS DE FIXAO
Escreva um programa que leia 10 valores fornecidos pelo usurio e mostre o nmero digitado e seu dobro.
Gerar nmeros de 0 a 50, variando de 5 em 5.Mostrar no fnal a soma de todos os nmeros digitados.
Escreva um programa que leia a entrada de 20 valore e mostre a soma dos valores positivos e a dos negativos.
Escreva um programa que, a partir da entrada de um valor inteiro entre 1 e 10, exiba a tabuada desse nmero,
do 0 ao 10.
Ler 20 valores dois a dois. Testar estes valores. Se o segundo for maior que o primeiro, calcular a soma deles.
Se o primeiro for maior que o segundo, calcular a diferena e, se forem iguais, multiplic-los.
Em uma empresa foram selecionados 12 funcionrios novos, com diferentes idades e para cada uma delas foram
registrados:
nome, idade e ms de nascimento. Aps o registro de dados, desejou-se saber:
a idade da pessoa mais jovem;
o nome e a idade da pessoa mais idosa;
o nmero de pessoas nascida no ms de outubro(10).
10.2 INSTRUO DO
Voc deve ter notado que na palavra-chave while a condio avaliada antes de executar qualquer comando do loop. Se
20
Escola Alcides Maya - Segundo Mdulo
a condio for verdadeira, as instrues do loop so executadas. Se a condio for falsa antes da primeira execuo do loop,
o programa prosseguir com as instrues colocadas aps o loop. Dessa forma, pode ser que as instrues no interior do loop
jamais sejam executadas. Se voc quiser que as instrues no interior do loop sejam executadas no mnimo uma vez, utilize
a palavra-chave do. Isso garante que a instruo seja executada, pelo menos, uma vez, antes de avaliar se h necessidade de
repetir ou no o loop. Sintaxe de instruo do:
do
{
// Cdigo a ser executado ao menos uma vez ou enquanto a
// condio for verdadeira.
}
while (<condio>);
10.2.1 EXERCCIO DE SALA DE AULA
Para demonstrar o funcionamento da estrutura de lao do, o exemplo abaixo mostra que, ao contrrio do que ocorre com
a estrutura while, o bloco de cdigo dentro do lao executado ao menos uma vez, mesmo que a condio avaliada no seja
vlida.
Crie um novo projeto do tipo Console Aplicattion com o nome de EstruturaDo, e em seguida renomeie a classe
Program.cs para TestandoDo.cs. Por fm, insira o cdigo marcado em negrito abaixo no mtodo Main().
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EstruturaDo
{
class TestandoDo
{
static void Main(string[] args)
{
int i = 11;
do
{
Console.WriteLine(i);
} while (i <= 10);
Console.ReadKey();
}
}
}
21
Linguagem C#
10.3 INSTRUO FOREACH
Os loops de enumerao permitem percorrer itens de arrays e colees. A sintaxe da instruo foreach :
foreach (<tipo> <elemento> in <coleo>)
{
// Cdigo a ser executado uma vez para cada elemento da
// coleo.
}
Parmetro Descrio
tipo o tipo de dados utilizado pela varivel (elemento).
elemento a varivel utilizada para percorrer os itens da coleo ou array.
coleo o objeto que contm o array ou coleo a ser iterado.
Exemplo:
string[] cores = new string[3];
cores[0] = Azul;
cores[1] = Vermelho;
cores[2] = Verde;
foreach (string cor in cores)
{
System.Console.WriteLine(cor);
}
10.3.1 EXERCCIO DE SALA DE AULA
Usando a estrutura foreach vamos observar como percorrer uma coleo de dados, de uma maneira mais simples e
rpida.
Crie um novo projeto do tipo Console Aplicattion com o nome ExemploForEach e em seguida renomeie a classe
Program.cs para ExemploForEach.cs. Por fm, insira o cdigo marcado em negrito abaixo dentro do mtodo principal
Main():
22
Escola Alcides Maya - Segundo Mdulo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ExemploForEach
{
class Program
{
static void Main(string[] args)
{
string[] cores = new string[5];
for (int i = 0; i < cores.Length; i++)
{
Console.WriteLine(Digite o nome de uma cor: );
cores[i] = Console.ReadLine();
}
foreach (string cor in cores)
{
Console.WriteLine(cor);
}
Console.ReadKey();
}
}
}
11 DESENVOLVENDO APLICAES GRFICAS
Se voc achou fcil desenvolver aplicaes no modo console em C#, vai se surpreender com a facilidade e versatilidade
que o ambiente oferece para o desenvolvimento de aplicaes grfcas (ou Windows Forms Applications, como elas so
conhecidas no .NET Framework).
Sua Primeira Aplicao Windows Forms
Para criar uma aplicao Windows Forms, primeiro clique em File > New Application... e selecione Windows Forms
Application na caixa de templates, em seguida informando OlaMundoWindowsForms como nome da aplicao.
Ao clicar em OK voc ver a seguinte tela preparada para que voc projete seu formulrio:
23
Linguagem C#
Criando uma Aplicao Windows Forms
Note que nos cantos da janela alguns botes reagem quando se coloca o mouse sobre eles, como por exemplo o boto
Toolbox no canto esquerdo da janela. Para facilitar o processo de criao da tela, coloque o cursor do mouse sobre ele e,
quando o painel do Toolbox se abrir, clique no boto Auto Hide para fxar a Toolbox na esquerda da janela. Repita o mesmo
para os painis Error List, Solution Explorer e Properties se necessrio, e voc obter uma janela semelhante mostrada
abaixo
24
Escola Alcides Maya - Segundo Mdulo
Janela de Edio do Projeto com os Principais Painis Fixados
No centro da tela, como mencionado anteriormente, voc v o editor visual. ali que desenharemos a nossa interface.
Mas vale a pena darmos uma explorada nos diferentes painis, para que nos familiarizemos.
Na esquerda, a Toolbox (caixa de ferramentas) a caixa que nos oferece os controles que poderemos colocar na interface
que estamos criando. Abaixo dela temos dois painis intercambiveis, Error List e Task List. Em Error List sero exibidos os
erros de compilao ocorridos ao gerar o nosso projeto. J em Task List podemos criar pequenos lembretes para ns mesmos,
como anotaes sobre pontos pendentes no projeto e assim por diante.
direita, acima, temos outros dois painis intercambiveis, Solution Explorer e Class View. Os dois nos oferecem
diferentes vises dos arquivos que criamos para o nosso projeto, e uma rpida olhadela j nos permite ver que o C# cria muita
coisa automaticamente para ns assim que um novo projeto criado.
E logo abaixo dos painis Solution Explorer e Class View existe um outro painel muito importante, o Properties, que
exibe as propriedades do objeto selecionado no Designer ou nos painis Solution Explorer e Class View. por meio dele que
defniremos os atributos dos controles que vamos adicionar nossa interface.
11.2 CONTROLES
Na seo anterior mencionamos a palavra controles vrias vezes, mas ainda no explicamos o seu signifcado. No
Visual Studio, um controle um componente de interface, como por exemplo um boto ou uma caixa de texto. O Visual
Studio nos oferece um editor visual que nos permite facilmente criar telas por meio do arrastar e soltar de controles, e depois
pela sua confgurao atravs do painel de propriedades. Vamos brincar com isso em seguida.
25
Linguagem C#
11.3 DESENHANDO UMA JANELA
Como voc pode ver, assim que escolhe criar uma aplicao Windows Forms o Visual Studio cria uma janela inicial
para voc. Isso porque todas as aplicaes Windows Forms tero pelo menos uma janela. Como veremos em seguida, uma
janela um controle tambm, ento tudo o que dissemos na seo anterior se aplica para janelas tambm. Elas tambm tm
propriedades e eventos.
Para experimentar, vamos criar a verso grfca da nossa aplicao OlaMundo.
Para isso usaremos a Toolbox. Note que ela vem dividida em vrias sees, como Common Controls, Containers e assim
por diante. Estas sees separam os controles em categorias, ento fca fcil de vermos como os diferentes controles se
relacionam. Por ora expanda a seo Common Controls, pois ela agrupa os controles que usaremos com mais freqncia.
Fazendo uso da Toolbox, adicione dois controles janela vazia no centro do editor. A maneira de fazer isso voc que
escolhe: voc pode clicar no controle que deseja adicionar no Toolbox e depois clicar no ponto da janela em que deseja que
o controle seja adicionado; ou voc pode arrastar o controle da Toolbox at a janela. Experimente brincar com o editor, voc
ver que ele lhe oferece muitas facilidades para adicionar controles e alinh-los consistentemente. Depois de brincar, tente
deixar a janela semelhante mostrada abaixo:
Criando uma Janela
Pronto, a parte difcil est pronta (-:
Agora temos que ajustar os controles que adicionamos s nossas necessidades. Por exemplo, vamos querer mudar o ttulo
da janela e os textos mostrados pelo label e boto. ai que entra o trabalho no painel de Propriedades.
11.4 ALTERANDO AS PROPRIEDADES DOS CONTROLES
Com o bsico da tela desenhado, chegou a hora de fazer os ajustes fnos. Nesta etapa faremos os diferentes controles
mostrarem as informaes que desejamos, assim como podemos fazer outros ajustes na parte visual, como cores e outras
frulas.
No nosso exemplo, bem simples, vamos nos concentrar em alterar os textos exibidos pelos trs controles que temos no
nosso formulrio: a prpria janela, o label e o boto.
26
Escola Alcides Maya - Segundo Mdulo
Para alterar as propriedades de um objeto, selecione-o no editor e atente no canto inferior direito da tela, no painel
Propriedades. Comece clicando na janela, por exemplo, e repare nas propriedades listadas para ela:
Propriedades de um Form
A principal propriedade de um Form a Text. ela que indica o texto a ser mostrado na barra de ttulos da janela. Para
alterar o ttulo da nossa janela basta editar a propriedade. Troque-a por Ola Mundo!, por exemplo. Note que ao pressionar
Enter o ttulo da janela muda de acordo com o valor informado:
27
Linguagem C#
11.5 ALTERANDO O TTULO DE UMA JANELA
Repita o processo para os outros dois componentes, mudando a propriedade Text do label para um texto vazio e a mesma
propriedade do boto para Diga Ol, conforme mostrado na tela abaixo:
Nosso Formulrio editado
OK, a parte visual da nossa primeira aplicao est pronta. Agora precisamos adicionar-lhe um pouco de inteligncia ...
11.6 TRATANDO EVENTOS
O C#, assim como outras linguagens usadas para desenvolver aplicativos baseados em janelas, utiliza um conceito
chamado de Orientao por Eventos. Em essncia isso quer dizer que programamos nosso aplicativo como uma srie de
respostas aos eventos gerados pelo usurio (ou mesmo pelo prprio aplicativo). Estes eventos so aes tomadas pelo
usurio, por exemplo, como clicar em um boto ou entrar um texto em uma caixa de textos.
Em C#, toda vez que o usurio efetua uma ao, um cdigo de tratamento de eventos automaticamente lanado. Tudo o
que precisamos fazer dizer ao programa o que queremos que ele faa quando cada um destes eventos ocorrer, e a plataforma
toma conta do resto por ns.
Diferentes controles lidam com diferentes eventos. Um boto precisa responder quando clicado, um formulrio precisa
responder quando maximizado, uma caixa de textos precisa responder quando o texto nela contido alterado e assim
por diante. Ento, para defnirmos o tipo de resposta a cada um destes eventos, usaremos uma conjuno do painel de
Propriedades com o Editor de Cdigo.
Funciona mais ou menos assim: no caso do aplicativo que estamos criando, queremos que, quando o usurio clicar no
boto Diga Ol, uma mensagem Ol mundo! seja exibida na tela. Assim, precisamos responder ao evento de clique no
boto: quando ele ocorrer, mostraremos um texto no label.
28
Escola Alcides Maya - Segundo Mdulo
O Painel Propriedades exibindo os Eventos do boto
Para ver os eventos possveis em um boto, primeiro selecione o boto no editor e depois, no painel de propriedades,
clique no boto Events. Para voltar a ver as propriedades do boto clique no boto Properties.
Ao clicar no boto Events para um boto voc ver a lista com todos os eventos passveis de serem capturados por um
boto. Obviamente o mais comum deles o evento Click, que ocorre quando o usurio clica no boto.
Para editar o cdigo que tratar o evento Click do nosso boto, clique duas vezes sobre o evento no painel de propriedades.
O Visual Studio o levar para o Editor de Cdigo, onde voc poder descrever o que quer que acontea quando o boto for
clicado.
Editando o evento Click do boto
29
Linguagem C#
Na fgura acima voc pode ver que o Visual Studio j cria muita coisa para voc, faltando apenas escrever o que fazer
efetivamente para tratar o evento.
Altere o cdigo no editor acrescentando a linha em negrito mostrada abaixo:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OlaMundoWindowsForms
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
label1.text = Ol Mundo!;
}
}
}
Pronto, sua primeira aplicao visual est pronta, e voc s precisou usar seus dotes artsticos e escrever uma nica linha
de cdigo ...
Clique em File > Save All... para salvar o seu projeto, e para execut-lo clique em Debug > Start Without Debugging.
O resultado deve ser semelhante ao mostrado abaixo:
30
Escola Alcides Maya - Segundo Mdulo
Ol Mundo em Windows Forms
Agora clique no boto e surpreenda-se com o seu sucesso ...
11.6 MTODOS
Em determinadas situaes poderemos querer realizar certas operaes com os controles de uma janela, como por
exemplo ocultar um boto ou selecionar um checkbox. Estas operaes esto disponveis por meio de mtodos associados
aos controles. Podemos entender um mtodo como uma mensagem que enviaremos a um controle, solicitando que ele faa
algo.
No nosso exemplo anterior, poderamos modifcar o cdigo para ocultar o boto Diga Ol uma vez que ele foi clicado.
fcil de fazer, como voc ver. Edite o cdigo do programa adicionando a linha em negrito.
31
Linguagem C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace OlaMundoWindowsForms
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
label1.text = Ol Mundo!;
button1.hide();
}
}
}
No exemplo acima estamos chamando o mtodo hide() do controle button1. A notao sempre esta: o objeto que se quer
acessar, um ponto e o nome do mtodo a ser chamado, seguido de parnteses. Mtodos podem receber parmetros.
Parece familiar? Exatamente, mtodos no passam de funes. A nica diferena que os mtodos esto associados aos
objetos.
11.7 NOMEANDO OS CONTROLES
Se voc seguiu os exemplos anteriores, percebeu como pode s vezes pode ser difcil lidar com muitos controles na
tela. Trabalhar com label1 e button1 pode no ter sido muito complicado num exemplo simples como o nosso, mas imagine
quando o nmero de controles se multiplica em um formulrio apenas mediano. A estes nomes artifciais no so nenhum
pouco intuitivos. O melhor nestas situaes nomear voc mesmo os componentes, pelo menos aqueles aos quais voc
precisar se referenciar em meio ao cdigo.
Por exemplo, compare este trechos de cdigo do exemplo anterior ...
private void button1_Click(object sender, EventArgs e)
{
label1.text = Ol Mundo!;
button1.hide();
}
com este:
32
Escola Alcides Maya - Segundo Mdulo
private void btnDigaOla_Click(object sender, EventArgs e)
{
lblTextoOla.text = Ol Mundo!;
btnDigaOla.hide();
}
A maneira de conseguir isto atravs do prprio painel de propriedades. L, bem no topo da lista de propriedades de cada
controle, voc encontrar uma propriedade chamada (Name). Basta mud-la para que o nome do componente mude, mesmo
em trechos de cdigo que voc j tenha escrito, o que facilita bastante...
importante notar que a propriedade Name segue as mesmas regras de nomes de variveis. Na verdade, podemos at
mesmo entender um boto colocado em um formulrio como uma varivel do tipo boto.
Alterando o nome de um controle.
12 USANDO OS CONTROLES
Como pudemos ver no incio deste captulo, a Toolbox oferece uma grande variedade de controles, que fcam sua
disposio para serem usados em suas aplicaes. No temos tempo nem espao para vermos todos eles, ento vamos
explorar apenas alguns dos principais. Fique vontade para experimentar os outros que julgar interessantes.
12.1 FORM
O controle Form, ou formulrio, representa uma janela da nossa aplicao, e normalmente ser preenchido com uma srie
de outros controles.
33
Linguagem C#
Principais Propriedades
Propriedade Descrio
AcceptButton Permite indicar o boto que ser ativado ao se pressionar Enter quando
o formulrio tem o foco do teclado.
BackColor Permite indicar a cor de fundo da janela.
BackgroundImage Permite indicar uma imagem para ser usada como fundo da janela.
BackgroundImageLayout Permite indicar a maneira como a imagem de fundo ser usada para
preencher a janela.
Bounds Indica o tamanho e a localizao do formulrio em relao ao seu
controle pai.
CancelButton Permite indicar o boto que ser ativado ao se pressionar Esc quando a
janela tem o foco do teclado.
ContextMenuStrip Indica o menu de contexto a exibir quando o usurio clica com o boto
direito sobre o formulrio.
ControlBox Permite indicar se a janela ter ou no uma caixa de controle no canto
esquerdo da sua barra de ttulo.
Cursor Permite indicar o cursor a usar quando o ponteiro do mouse
posicionado sobre a janela.
Enabled Permite habilitar e desabilitar o formulrio.
Focused Indica se este formulrio tem ou no o foco.
FormBorderStyle Permite indicar o tipo de borda da janela.
Icon Permite indicar o cone associado a esta janela.
IsMDIContainer Indica se este formulrio um continer MDI (multi-document
interface).
Location Indica as coordenadas do canto superior esquerdo da janela.
MainMenuStrip Permite especifcar a barra de menus a ser usada por esta janela.
MaximizeBox Permite indicar se o boto de maximizar estar visvel na barra de ttulo
da janela.
MinimizeBox Permite indicar se o boto de minimizar estar visvel na barra de ttulo
da janela.
Opacity Indica a opacidade da janela.
ShowIcon Indica se o cone da janela deve estar visvel na barra de ttulo.
Size Indica o tamanho do formulrio.
Text Indica o ttulo da janela.
Visible Indica se o formulrio est visvel ou no.
WindowState Indica o estado da janela (normal, minimizada ou maximizada).
34
Escola Alcides Maya - Segundo Mdulo
Principais Eventos
Evento Descrio
Activated Lanado quando o formulrio ativado via cdigo ou
diretamente pelo usurio.
Click Lanado quando o usurio clica no formulrio.
Closed Lanado quando o formulrio fechado.
Closing Lanado quando o formulrio est sendo fechado.
Deactivated Lanado quando o formulrio perde o foco e no mais o
form ativo.
DoubleClick Lanado quando o formulrio recebe um duplo clique.
EnabledChanged Lanado quando o formulrio habilitado ou desabilitado.
GotFocus Lanado quando o formulrio recebe o foco.
Load Lanado quando o formulrio exibido pela primeira vez
desde que a aplicao foi iniciada.
LostFocus Lanado quando o formulrio perde o foco.
Resize Lanado quando o tamanho do formulrio modifcado.
TextChanged Lanado quando o ttulo da janela alterado.
VisibleChanged Lanado quando a propriedade Visible alterada.
Principais Mtodos
Mtodo Descrio
Activate Ativa o formulrio e lhe d foco.
BringToFront Traz o formulrio para frente.
Close Fecha o formulrio.
Dispose Libera os recursos usados pelo formulrio.
Focus D o foco ao formulrio.
Hide Oculta o formulrio.
SendToBack Envia o formulrio para trs.
Show Exibe o formulrio.
ShowDialog Exibe o formulrio como uma caixa de dilogos modal.
12.2 COMMON CONTROLS
O grupo Common Controls rene aqueles que so os controles mais freqentemente utilizados. Aqui encontraremos
botes, caixas de texto e labels.
12.3 BUTTON
O controle Button provavelmente um dos controles mais simples que voc encontrar na Toolbox, mas ao mesmo tempo
ele um dos mais teis. Ele nos oferece um boto simples que realiza uma determinada ao quando clicado pelo usurio.
35
Linguagem C#
Principais Propriedades
Propriedade Descrio
BackgroundImage Permite indicar a imagem de fundo do boto.
BackgroundImageLayout Permite indicar o tipo de layout a usar quando exibindo
a imagem de fundo do boto.
Cursor Permite indicar o cursor que aparece quando o mouse
colocado sobre o boto.
Enabled Indica se o boto est habilitado ou no.
Font Indica a fonte usada para exibir o texto do boto.
Image Indica a imagem dentro do boto.
ImageAlign Indica o tipo de alinhamento da imagem dentro do
boto.
Size Indica as dimenses do boto (Width a largura, Height
a altura).
TabStop Indica se o usurio pode usar a tecla Tab para dar foco
no boto.
Text Indica o texto mostrado pelo boto.
TextAlign Indica o alinhamento do texto dentro do boto.
Visible Indica se o boto est visvel ou no.
Principais Eventos
Evento Descrio
Click Lanado quando o boto clicado.
EnabledChanged Lanado quando o boto habilitado ou desabilitado
programaticamente (veja a propriedade enabled).
VisibleChanged Lanado quando o boto exibido ou ocultado programaticamente
(veja o mtodo hide() e a propriedade Visible).
Principais Mtodos
Mtodo Descrio
BringIntoView Tenta trazer o boto para a rea visvel da tela, rolando o seu continer
se necessrio/possvel.
Focus Tenta colocar o foco do teclado neste boto.
MoveFocus Tenta retirar o foco do teclado deste boto, movendo-o para o prximo
controle ou o controle anterior no continer.
CheckBox
O controle CheckBox oferece a possibilidade de o usurio ativar ou desativar uma determinada opo. Este um
componente bastante til para aqueles casos em que queremos que o usurio ligue ou desligue uma dada situao ou informe
se um elemento est ativado ou no.
36
Escola Alcides Maya - Segundo Mdulo
Principais Propriedades
Propriedade Descrio
BackColor Determina a cor de fundo do checkbox.
Checked Determina se o checkbox est marcado ou no.
CheckState Determina o estado do checkbox.
Enabled Determina se o controle est habilitado.
Focused Determina se o controle tem o foco.
Font Permite indicar a fonte a ser usada pelo checkbox.
TabIndex L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Text O texto exibido por este checkbox.
Visible Permite indicar se o checkbox deve estar visvel ou no.
Primcipais Eventos
Evento Descrio
Click Lanado quando o checkbox clicado.
EnabledChanged Lanado quando o checkbox habilitado ou desabilitado programaticamente
(veja a propriedade enabled).
GotFocus Lanado quando o checkbox recebe o foco.
LostFocus Lanado quando o checkbox perde o foco.
VisibleChanged Lanado quando o checkbox exibido ou ocultado programaticamente
(veja o mtodo hide() e a propriedade Visible).
Principais Mtodos
Mtodo Descrio
BringToFront Traz este controle para frente.
Focus D foco no checkbox.
Hide Oculta o checkbox.
SendToBack Envia este controle para trs.
Show Exibe este controle.
12.4 LABEL
Um label oferece uma maneira conveniente de exibir uma informao ao usurio.
Principais Propriedades
Propriedade Descrio
BackColor Determina a cor de fundo do label.
Enabled Determina se o controle est habilitado.
Font Permite indicar a fonte a ser usada pelo checkbox.
Text O texto exibido por este label.
TextAlign Indica o alinhamento de texto neste controle.
Visible Permite indicar se o checkbox deve estar visvel ou no.
37
Linguagem C#
Primcipais Eventos
Evento Descrio
VisibleChanged Lanado quando o checkbox exibido ou ocultado programaticamente (veja o
mtodo hide() e a propriedade Visible).

Principais Mtodos
Mtodo Descrio
BringToFront Traz este controle para frente.
Hide Oculta o label.
SendToBack Envia este controle para trs.
Show Exibe este controle.
12.5 LISTBOX
O controle ListBox apresenta uma lista de opes e permite que o usurio selecione uma ou vrias delas.
Principais Propriedades
Propriedade Descrio
BackColor Determina a cor de fundo do listbox.
Enabled Determina se o controle est habilitado.
Focused Determina se o controle tem o foco.
Font Permite indicar a fonte a ser usada pelo checkbox.
Items D acesso lista de opes contidas neste ListBox.
SelectedIndex Indica o ndice da opo selecionada, se houver.
SelectedIndices Indica os ndices das opes selecionadas, se houver.
SelectedItem L ou altera a opo selecionada.
SelectredItems L a lista de opes selecionadas.
TabIndex L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Text Indica o texto da opo correntemente selecionada, se houver uma nica.
Visible Permite indicar se o checkbox deve estar visvel ou no.
Primcipais Eventos
Evento Descrio
EnabledChanged Lanado quando o listbox habilitado ou desabilitado programaticamente
(veja a propriedade enabled).
GotFocus Lanado quando o listbox recebe o foco.
LostFocus Lanado quando o listbox perde o foco.
SelectedIndexChanged Lanado quando a propriedade SelectedIndex ou SelectedIndices muda.
SelectedValueChanged Lanado quando a propriedade SelectedValue muda.
VisibleChanged Lanado quando o checkbox exibido ou ocultado programaticamente (veja
o mtodo hide() e a propriedade Visible).
38
Escola Alcides Maya - Segundo Mdulo
Principais Mtodos
Mtodo Descrio
BringToFront Traz este controle para frente.
Focus D foco no checkbox.
Hide Oculta o checkbox.
SendToBack Envia este controle para trs.
Show Exibe este controle.
12.6 PICTUREBOX
O controle PictureBox oferece o recurso de exibir imagens dentro de um formulrio
Principais Propriedades
Propriedade Descrio
BackColor Determina a cor de fundo do picturebox.
Enabled Determina se o controle est habilitado.
Focused Determina se o controle tem o foco.
Image Permite ler ou indicar a imagem a ser exibida dentro do controle.
ImageLocation Permite ler ou indicar o caminho ou URL at a imagem a ser exibida pelo controle.
TabIndex L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Visible Permite indicar se o picturebox deve estar visvel ou no.
Primcipais Eventos
Evento Descrio
Click Lanado quando o picturebox clicado.
DoubleClick Lanado quando o picturebox recebe um duplo clique.
EnabledChanged Lanado quando o picturebox habilitado ou desabilitado programaticamente
(veja a propriedade enabled).
GotFocus Lanado quando o picturebox recebe o foco.
LostFocus Lanado quando o picturebox perde o foco.
VisibleChanged Lanado quando o checkbox exibido ou ocultado programaticamente (veja
o mtodo hide() e a propriedade Visible).
Principais Mtodos
Mtodo Descrio
BringToFront Traz este controle para frente.
Focus D foco no picturebox.
Hide Oculta o picturebox.
Load Exibe uma imagem no picturebox.
SendToBack Envia este controle para trs.
Show Exibe este controle.
12.7 RADIOBUTTON
O controle RadioButton oferece uma srie de opes das quais o usurio pode selecionar apenas uma.
39
Linguagem C#
Principais Propriedades
Propriedade Descrio
BackColor Determina a cor de fundo do checkbox.
Checked Determina se o radiobutton est marcado ou no.
Enabled Determina se o controle est habilitado.
Focused Determina se o controle tem o foco.
Font Permite indicar a fonte a ser usada pelo checkbox.
TabIndex L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Text O texto exibido por este radiobutton.
Visible Permite indicar se o checkbox deve estar visvel ou no.
Primcipais Eventos
Evento Descrio
CheckedChanged Lanado quando o atributo Checked muda.
Click Lanado quando o radiobutton clicado.
EnabledChanged Lanado quando o radiobutton habilitado ou desabilitado programaticamente (veja
a propriedade enabled).
GotFocus Lanado quando o radiobutton recebe o foco.
LostFocus Lanado quando o radiobutton perde o foco.
VisibleChanged Lanado quando o radiobutton exibido ou ocultado programaticamente (veja o
mtodo hide() e a propriedade Visible).
Principais Mtodos
Mtodo Descrio
BringToFront Traz este controle para frente.
Focus D foco no radiobutton.
Hide Oculta o radiobutton.
SendToBack Envia este controle para trs.
Show Exibe este controle.
12.8 TEXTBOX
O controle TextBox oferece a maneira mais bsica de entrada de dados para aplicaes baseadas em Windows Forms.
Principais Propriedades
Propriedade Descrio
AcceptReturn Determina se este textbox pode receber caracteres de quebra de linha.
AcceptTab Determina se este textbox pode receber caracteres de tabulao.
BackColor Determina a cor de fundo do textbox.
CanUndo Determina se o usurio pode desfazer a ltima ao dentro deste controle.
Enabled Determina se o controle est habilitado.
Focused Determina se o controle tem o foco.
Font Permite indicar a fonte a ser usada pelo textbox.
Modifed Determina se o texto armazenado por este controle foi modifcado pelo usurio.
Multilline Determina se este textbox pode receber mltiplas linhas de texto.
PasswordChar L ou altera o caractere usado para ocultar senhas em um textbox de uma nica linha.
ReadOnly Indica se este textbox de apenas leitura.
ScrollBars Indica se este componente deve mostrar barras de rolagem.
SelectedText L ou indica o texto a aparecer selecionado dentro do componente,
40
Escola Alcides Maya - Segundo Mdulo
SelectionLength Indica o nmero de caracteres selecionados dentro deste controle.
SelectionStart Indica o ndice do primeiro caractere selecionando dentro deste controle.
TabIndex L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Text O texto exibido por este textbox.
TextAling Indica o tipo de alinhamento de texto dentro deste controle.
TextLength Indica o nmero de caracteres armazenados dentro deste controle.
Visible Permite indicar se o textbox deve estar visvel ou no.
WordWrap Indica se o componente deve quebrar as linhas automaticamente sempre que necessrio.
Primcipais Eventos
Evento Descrio
EnabledChanged Lanado quando o textbox habilitado ou desabilitado programaticamente (veja
a propriedade enabled).
GotFocus Lanado quando o textbox recebe o foco.
KeyPress Lanado toda a vez que uma tecla pressionada dentro do controle.
LostFocus Lanado quando o textbox perde o foco.
TextChanged Lanado quando o texto armazenado pelo textbox modifcado.
VisibleChanged Lanado quando o textbox exibido ou ocultado programaticamente (veja o
mtodo hide() e a propriedade Visible).
Principais Mtodos
Mtodo Descrio
BringToFront Traz este controle para frente.
Cut Move o texto atualmente selecionado no controle para a rea de transferncia.
Focus D foco no textbox.
Hide Oculta o textbox.
Paste Substitui o texto atualmente selecionado no controle por aquele armazenado na rea de
transferncia.
Select Ativa este textbox.
SelectAll Seleciona todo o texto dentro deste textbox.
SendToBack Envia este controle para trs.
Show Exibe este controle.
12.9 CLCULO DE SALRIO
O programa ir calcular o salrio de um funcionrio a partir da entrada do valor de salrio bruto, sua funo e, se
pertinente, o valor das duas vendas.
Se o funcionrio for Vendedor uma comisso de 10% sobre o total de suas vendas dever ser adicionada ao seu salrio.
Passos a serem seguidos:
Crie um novo Projeto Windows Forms: e nomei-o como SalrioVendedor.
Clique no Form1, e altere as seguintes propriedades:
o Name = frmSalarioVendedor
o Text = Calculando Salrio Vendedor
Em seguida insira os seguintes componentes seguindo o layout mostrado abaixo:
o 4 TextBoxes
o 5 Labels
o 2 RadioButtons
o 1 Button
41
Linguagem C#
Altere as seguintes propriedades dos componentes:
Componente Propriedade Texto a ser inserido
Label1 NAME lblNome
TEXT Nome
Label2 NAME lblSalarioBruto
TEXT Salrio Bruto
Label3 NAME lblFuncao
TEXT Funo
Label4 NAME lblValorVendas
TEXT Valor de Vendas
Label4 NAME lblSalarioReceber
TEXT Salrio a Receber
TextBox1 NAME txtNome
TextBox2 NAME txtSalarioBruto
TextBox3 NAME txtValorVenda
TextBox4 NAME txtSalarioReceber
Button1 NAME btnCalcular
TEXT Calcular
RadioButton1 TEXT Vendedor
RadioButton2 TEXT Outros
Clique com o boto direito do mouse sobre o formulrio e selecione a opo View Code. Em seguida declare as
seguintes variveis.
42
Escola Alcides Maya - Segundo Mdulo
namespace SalarioVendedor
{
publlic partial class frmSalarioVendedor : Form
{
string nome;
double salarioBruto, valorVendas, salarioReceber;
(...)
Note que vamos pedir um Valor de Venda apenas se o usurio selecionou Vendedor no RadioButton. Para tanto vamos
usar a propriedade ReadOnly do TextBox, conforme mostra o trecho de cdigo abaixo:
private void frmSalarioVendedor_Load(object sender, EventArgs e)
{
txtValorVenda.ReadOnly = true;
}
private void rdbVendedor_CheckedChange(object sender, EventArgs e)
{
txtValorVenda.ReadOnly = false;
}
private void rdbOutros_CheckedChanged(object sender, EventArgs e)
{
txtValorVenda.ReadOnly = true;
}
Agora precisamos tornar possvel o clculo do salrio atravs do evento click do boto calcular. Use o seguinte trecho
de cdigo:
private void btnCalcular_Click(object sender, EventArgs e)
{
salarioBruto = System.Convert.ToDouble(txtSalarioBruto.Text);
if (rdbVendedor.Checked == true)
{
valorVendas = System.Convert.ToDouble(txtValorVenda.Text);
salarioReceber = ((valorVendas * 10) / 100) + salarioBruto;
txtSalarioReceber = System.Convert.ToString(salarioReceber);
}
}
43
Linguagem C#
Analisando o cdigo acima voc poder perceber que ao lidarmos com os valores informados nos TextBoxes
precisamos primeiro convert-los para um nmero em ponto futuante atravs do uso do mtodo System.Convert.ToDouble().
Isso ocorre porque a propriedade Text de um TextBox do tipo String. Se quisermos fazer operaes matemticas com ela
vamos precisar convert-la para um nmero.
Da mesma forma, quando quisemos mover o salrio a receber para o outro TextBox, precisamos converter a varivel
salarioReceber (do tipo double) para uma String e s ento colocar o valor resultante na propriedade Text.
Uma vez concluda a edio do cdigo, salve o projeto e pressione F5 para execut-lo. Experimente entrar com
alguns valores e verifque o resultado.
12.10 COMPARAO DE VALORES
O programa ir pedir que o usurio informe trs valores e depois mostrar o maior deles.
Passos a serem seguidos:
Crie um novo projeto WindowsForms e nomei-o MaiorDeTres.
Selecione o Form1 e altere as suas propriedades conforme mostrado abaixo:
o NAME= frmMaiorValorDeTres
o TEXT= Maior Valor
Agora insira os seguintes componentes formulrio, sempre seguindo o modelo mostrado abaixo:
o 4 Labels
o 3 TextBoxes
o 1 Button
Altere as seguintes propriedades dos componentes
Componente Propriedade Texto a ser inserido
Label1 NAME lblValorA
TEXT Valor A
Label2 NAME lblValorB
TEXT ValorB
Label3 NAME lblValorC
TEXT Valor C
Label4 NAME lblResposta
TEXT (deixar vazio)
TexBox1 NAME txtValorA
TexBox2 NAME txtValorB
44
Escola Alcides Maya - Segundo Mdulo
TexBox3 NAME txtValorC
Button1 NAME btnVerifcar
TEXT Verifcar
Faa a declarao das variveis.
Insira no evento CLICK do boto o seguinte cdigo:
public partial class frmMaiorValorDeTres : Form
{
public frmMaiorValorDeTres()
{
InitializeComponent();
}
private void btnVerifcar_Click(object sender, EventArgs e)
{
int valorA = System.Convert.ToInt16(txtValorA.Text);
int valorB = System.Convert.ToInt16(txtValorB.Text);
int valorC = System.Convert.ToInt16(txtValorC.Text);
if (valorA > valorB)
{
if (valorA > valorC)
{
lblResposta.Text = O Maior Valor o A ;
}
else
{
lblResposta.Text = O Maior Valor o C;
}
}
else if (valorB > valorC)
{
lblResposta.Text = O Maior Valor o B;
}
else
{
lblResposta.Text = O Maior Valor o C;
}
}
}
45
Linguagem C#
12.11 CONTROLE DE PEDIDOS
Crie um programa onde o usurio possa fazer um mini-pedido na lanchonete, obtendo seu total e valor de servios.
Siga os seguintes passos:
Crie um novo projeto: TestandoCheckBox.
Altere as seguinte propriedades do Form1:
o FILE = frmFazendoPedidos.cs
o NAME = frmFazendoPedidos
o TEXT = Fazendo Pedidos
Insira os seguintes componente conforme o layout abaixo:
o 7 TextBoxes
o 6 Labels
o 3 CheckBoxes
o 1 Button
Altere as propriedades dos componentes, conforme tabela abaixo.
Componente Prorpriedade Texto a ser inserido
TextBox1 NAME txtNumMesa
TextBox2 NAME txtQtdChoop
TextBox3 NAME txtQtdPetiscos
TextBox4 NAME txtQtdRefeicao
TextBox5 NAME txtTotalParcial
TextBox6 NAME txtTaxaServico
TextBox7 NAME txtTotalPagar
Label1 NAME lblNumMesa
TEXT N. Mesa
Label2 NAME lblPedidos
TEXT Pedidos
Label3 NAME lblQuantidade
TEXT Quantidade
Label4 NAME lblTotalParcial
TEXT Total Parcial
Label5 NAME lblTaxaServico
TEXT Taxa de Servio (8%)
46
Escola Alcides Maya - Segundo Mdulo
Label6 NAME lblTotalPagar
TEXT Total a Pagar
Button1 NAME btnVerifcar
CheckBox1 NAME chkChoop
TEXT Choop R$ 4,90
CheckBox2 NAME chkPetisco
TEXT Petisco R$ 7,90
CheckBox3 NAME chkRefeicao
TEXT Refeio R$ 15,90
Insira no evento click do boto o cdigo marcado em negrito abaixo:
private void button1_Click(object sender, EventArgs e)
{
double qtdChoop = Convert.ToDouble(txtQtdChoop.Text);
double qtdPetisco = Convert.ToDouble(txtQtdPetisco.Text);
double qtdRefeicao = Convert.ToDouble(txtQtdRefeicao.Text);
double result1=0, result2=0, result3=0;
if (chkChoop.Checked == true)
{
result1 = qtdChoop * 4.50;
}
if (chkPetisco.Checked == true)
{
result2 = qtdPetisco * 7.90;
}
if (chkRefeicao.Checked == true)
{
result3 = qtdRefeicao * 15.90;
}
double totalParcial = result1 + result2 + result3;
txtTotalParcial.Text = Convert.ToString (totalParcial);
double taxaServico = (totalParcial * 10) / 100;
txtTaxaServico.Text = Convert.ToString (taxaServico);
txtTotalPagar.Text = Convert.ToString(totalParcial + taxaServico);
}
Observe que foi necessrio primeiramente fazer a converso de dados obtidos atravs dos textboxes, assim atribuindo os
respectivos valores s variveis declaradas.
Logo em seguida declaramos as variveis que iro receber valores dentro de uma estrutura de condio. J que a condio
do if pode no ser satisfeita, correramos o risco de nunca inicializarmos algumas daquelas variveis, ento para evitar isso
as inicializamos com 0 (zero) no momento da sua declarao.
47
Linguagem C#
13 TRATAMENTO ESTRUTURADO DE EXCEES
Quando um programa est em execuo pode surgir a necessidade de tratar erros que ocorrem por motivos inesperados,
como por exemplo a diviso de um nmero por zero ou a tentativa de abrir um arquivo que no existe. Essas so apenas
algumas situaes que podem ocorrer e que no podemos evitar. Podemos, sim, criar cdigo especfco para informar ao
usurio que a operao que ele pretende realizar invivel. Um erro deste tipo, se no tratado, pode encerrar o programa de
forma inesperada ou gerar uma mensagem incompreensvel para o usurio.
As instrues do C# utilizadas para tratamento de excees estruturadas so try, catch, fnally e throw:
Instruo Descrio
try Contm cdigo onde pode ocorrer uma ou mais excees, como por
exemplo a tentativa de abrir um arquivo inexistente, ou uma tentativa de dividir
um nmero por zero.
catch Contm o cdigo usado para tratar um determinado tipo de erro.
fnally sempre executado. til para liberar recursos usados dentro do bloco try,
como, por exemplo, fechar uma conexo com um banco de dados, fechar um
arquivo texto, etc.
throw Dispara uma exceo.
13.1 INSTRUES TRY E CATCH
O bloco try contm o cdigo onde o erro pode ocorrer, o bloco catch, o cdigo para manipular o erro ocorrido.
try
{
// Cdigo que pode lanar uma exceo.
}
catch (<tipo-de-exceo> <varivel-de-exceo>)
{
// Cdigo.
}
Veja um exemplo:
try
{
double n = 5 / 0;
}
catch (System.DivideByZeroException e)
{
System.Console.WriteLine(Tentamos dividir por zero.);
System.Console.WriteLine(Um erro foi lanado.);
}
48
Escola Alcides Maya - Segundo Mdulo
13.2 ALGUMAS EXCEES COMUNS
Algumas excees so lanadas automaticamente pelo Common Language Runtime quando as operaes bsicas falha.
Estas excees e suas causas de erro so mostradas na tabela abaixo:
Exceo Causa
System.ApplicationException Lanada quando ocorre um erro no-fatal de aplicao.
System.ArgumentException Lanada quando um argumento para um mtodo no vlido.
System.ArithmeticException Uma classe base para excees que ocorrem durante uma
operao aritimtica, como por exemplo DivideByZeroException e
OverfowException
System.ArrayTypeMismatchException Lanada quando um array no pode armazenar um dado elemento
porque o tipo de dados do elemento incompatvel com o tipo de dados
do array.
System.DivideByZeroException Lanada quando ocorre uma tentativa de dividir um valor integral
por zero.
System.FormatException Lanada quando o formato de um argumento no corresponde ao
parmetro especifcado pelo mtodo invocado.
System.IndexOutOfRangeException Lanada quando ocorre uma tentativa de acessar um elemento de
um array quando o ndice menor do que zero ou maior do que o
tamanho do array.
System.InvalidCastException Lanada quando uma converso explcita de um tipo de dados base
para uma interface ou um tipo de dados derivado falha em tempo de
execuo.
System.NotFiniteNumberException Ocorre quando uma operao de ponto futuante resulta em infnito
(seja positivo ou negativo) ou em um NaN (Not a Number).
System.NullReferenceException Ocorre quando voc tenta acessar um objeto cujo valor corrente
nulo.
System.OutOfMemoryException Lanada quando uma tentativa de alocar memria usando o
operador new falha. Isso indica que a memria disponvel para o CLR
foi completamente exaurida.
System.OverfowException Lanada quando uma operao aritimtica gera um valor maior
do que o maior valor possvel de se armazenar em um dado tipo de
dados.
System.StackOverfowException Lanada quando a pilha de execuo estourada por se ter muitas
chamadas de mtodos pendentes. Isso normalmente indica uma
recurso profunda demais ou mesmo infnita.
System.TypeInitializationException Lanada quando um construtor esttico lana uma exceo e no
existe um catch compatvel para captur-la.
13.3 MLTIPLOS BLOCOS CATCH
Voc tambm pode capturar mltiplas excees diferentes ao tentar tratar um erro. Mas tome cuidado: ao usar mltiplas
excees, trate primeiro aquelas de com profundidade maior, para s depois tratar as excees mais genricas.
Por exemplo, como mostrado na tabela acima, DivideByZeroException e OverfowException estendem ArithmeticException,
ento, ao tentar trat-las, coloque primeiro as subclasses para depois tratar a superclasse. Veja o exemplo.
49
Linguagem C#
try
{
// Cdigo que pode lanar uma exceo aritmtica
}
catch (DivideByZeroException dbze)
{
// Cdigo para tratar uma diviso por zero.
}
catch (OverfowException oe)
{
// Cdigo para tartar um erro de overfow.
}
catch (ArithmeticException ae)
{
// Cdigo para tratar alguma outra exceo aritmtica.
}
catch (Exception e)
{
// Cdigo para tratar uma exceo qualquer.
}
13.4 INSTRUO THROW
A instruo throw permite disparar uma exceo. Ela utilizada freqentemente para simular situaes de erro, ou quando
voc quer lanar suas prprias excees. Isso evita que tenhamos de testar fsicamente todas as condies que causariam
erros. Por exemplo, as linhas de cdigo a seguir simulam um tratamento de erro exatamente como se um erro de diviso por
zero tivesse ocorrido.
Try
{
throw new DivideByZeroException();
}
catch (Exception ex)
{
// Cdigo que captura o erro.
}
Esse cdigo parece no fazer muito sentido (porque iramos querer lanar um erro para simplesmente captur-lo logo
depois. Mas acredite, ele til. No na forma simples em que mostramos, mas podemos usar uma construo semelhante
para lanarmos nossas prprias excees. Imagine, por exemplo, que voc est criando uma aplicao fnanceira e quer
notifcar ao usurio quando ele tenta fazer uma retirada maior do que o seu limite permite: exatamente nestas situaes que
vamos querer lanar nossas prprias excees logicamente a operao poderia funcionar (ou seja, nenhuma exceo de
sistema seria lanada, j que o registro do cliente existe, a operao matemtica que geraria o novo saldo no causa erros e
mesmo a atualizao no banco poderia ser feita sem problemas, mas do ponto de vista da lgica de negcios aquela operao
no deve ser permitida.
50
Escola Alcides Maya - Segundo Mdulo
13.5 INSTRUO FINALLY
Esta instruo sempre executada independente do fato de ocorrer ou no uma exceo. til para fechar uma conexo
com um banco de dados, arquivo-texto etc.
Connection conn;
try
{
// Obtm uma conexo com o banco e faz algum uso til
// dela. Este cdigo pode lanar uma exceo.
}
catch (Exception e)
{
// Cdigo de tratamento da exceo.
}
fnally
{
// Cdigo que fecha a conexo com o banco, independente
// de ter ocorrido um erro ou no.
if (conn != null)
{
conn.close();
}
}
14 ORIENTAO A OBJETOS
14.1 INTRODUO
At h alguns anos atrs, o desenvolvimento de software baseou-se no chamado modelo procedural. Mas, depois de
muitos estudos, a comunidade de Tecnologia da Informao desenvolveu uma tcnica mais interessante, simples e natural
para o processo de anlise de problemas e desenvolvimentos de aplicaes: a Orientao a Objetos (OOP- Object Oriented
Programming).
Para compreender mais o signifcado dessa mudana, e o porqu de uma massiva migrao de profssionais do modelo
procedural, para a orientao a objetos. Vamos primeiramente fazer uma comparao das duas formas de programar.
14.2 MODELO PROCEDURAL
Neste modelo, dados e programa encontram-se em estruturas computacionais diferentes. Essa caracterstica difculta a
reunio desses elementos em unidades, fazendo com que os sistemas resultantes sejam muito complexos.
51
Linguagem C#
14.3 MODELO ORIENTADO A OBJETOS
A organizao dos elementos: funes e dados fcam numa mesma rea de memria, em uma mesma estrutura
computacional. Assim, a construo de sistemas torna-se mais simples.
52
Escola Alcides Maya - Segundo Mdulo
Na programao procedural voc descreve os passos que tomaria para solucionar um problema, enquanto que na
programao orientada a objetos voc descreve os objetos que compem esta soluo e a interao entre eles.
Por causa das diferenas estruturais e conceituais, o modelo orientado a objetos mais natural, mais prximo de nossa
compreenso da realidade. De um ponto de vista prtico, portanto, a orientao a objetos permite a reduo de custos na
produo de softwares e um melhor entendimento sobre o sistema desenvolvido.
Atualmente, existem vrias linguagens de programao que permitem a aplicao total das tcnicas da orientao a
objetos. So elas: Java, C++, SmalTalk, .NET e etc.,
14.4 DIFERENAS ENTRE CLASSES E OBJETOS
Todo mundo fala em Programao Orientada a Objetos, mas o primeiro conceito que vimos foi Classe, e no Objeto. Por
que isso?
Em C# voc programa usando classes, e estas classes mais tarde geraro objetos quando o programa estiver sendo
executado. Grosso modo, uma classe um conceito, um modelo para um objeto. Quando programa voc defne as classes,
e elas ganham vida atravs dos objetos gerados a partir delas.
Normalmente voc no usar as classes diretamente em seu programa. Ao invs disso, voc as usaria apenas para
instanciar novos objetos.
Imagine uma classe como uma planta de uma casa: voc no pode morar na planta da casa, mas pode us-la para criar
quantas casas quiser.
14.5 CLASSES
As Classes nos permitem organizar de forma coerente o cdigo que criamos. Por exemplo, podemos criar uma classe
chamada Custo que contm todas as funes necessrias para manipular os clculos referentes aos custos de uma empresa.
Quando criamos uma aplicao, iremos criar diversas classes, cada uma representando um componente do problema. a
interao entre estes diferentes componentes que gera os resultados esperados pela aplicao.
Diferente do que acontecia na metodologia procedural, na OOP dividimos nosso programa em classes por rea de interesse.
Por exemplo, para modelar uma aplicao de videolocadora iramos criar vrias classes (uma para flme, outra para
ator, outra para produtora, outra para cliente, e assim por diante) ao invs de colocarmos todo o cdigo em um nico
arquivo fonte.
Alm de ajudar na compreenso do cdigo, isso facilita sobremaneira a manuteno do mesmo: voc pode se sentir
tentado a comparar uma classe a um programa da metodologia procedural. A comparao at faz um certo sentido no incio,
mas medida que voc for ganhando experincia perceber que as classes so muito mais poderosas do que isso. Se for
bem projetada, uma classe poder ser usada sem qualquer modifcao em uma outra aplicao. E, ao contrrio do que
normalmente acontece na programao procedural, voc no precisar copiar o cdigo de uma classe para outro projeto
quando quiser utiliz-la: basta fazer referncia a ela e o run-time cuida do resto para voc.
Talvez ainda no tenha fcado claro, ento vale a pena reforar: uma classe um tipo de dados, o tipo de dados mais
poderoso do C#. Classes defnem dados e comportamentos em uma estrutura nica. Voc modela a classe no seu cdigo
fonte e, a partir dele, cria quantos Objetos daquele tipo precisar.
Como dissemos antes, uma classe comporta dados e comportamentos, os chamados membros da classe. Na notao de
OOP chamamos os dados de atributos, e comportamentos so mtodos.
53
Linguagem C#
Para acessar os membros de uma classe, devemos criar uma instncia da classe, um objeto cujo tipo de dados a classe,
ou seja, um objeto uma entidade concreta baseada em uma classe (uma entidade abstrata).
Atributos: representam os dados associados uma instncia de uma classe.
Mtodos: podem ser comparadas aos procedimentos e funes que existiam na metodologia procedural. Estes mtodos
atuaro sobre os atributos para gerar os resultados esperados pelo programador.
Uma classe declarada com a instruo class e pode ser precedida de um modifcador de acesso. Sintaxe:
[modifcadores] class <nome-da-classe>
{
<atributos>
<mtodos>
}
Exemplo:
public class Taxa
{
// Cdigo da classe.
}
Os objetos podem conter dados e ter comportamento: os dados dos objetos so armazenados em campos, propriedades, e
eventos do objeto, e o comportamento dos objetos defnido pelos mtodos e interfaces do objeto.
Algumas caractersticas dos objetos em C#.
Tudo que vocs usa em C# um objeto, inclusive formulrios Windows (Windows Forms) e controles.
So defnidos como modelos de classes
Usam propriedades para obter e modifcar as informaes que contm.
Tm mtodos e eventos que permitem executar aes.
Todas as classes herdam da classe System.Object.
Cada objeto precisa ser uma instncia de uma classe, e so criados por meio da palavra-chave new.

<nome-da-classe> <nome-da-instncia> = new <nome-da-classe>( );
Para criar uma instncia de uma classe hipottica chamada Taxa usaramos a seguinte sintaxe:
Taxa objetoTaxa = new Taxa();
Quando uma instncia de uma classe criada, uma referncia para o objeto passada para o programador. No exemplo
anterior, objetoTaxa uma referncia para um objeto baseado na classe Taxa. A classe defne um tipo de objeto, mas no um
objeto. Neste caso, podemos entender objetoTaxa como uma varivel do tipo Taxa, exatamente como se tivssemos criado
uma varivel idade do tipo int:
54
Escola Alcides Maya - Segundo Mdulo
Quando uma instncia de uma classe criada, uma referncia para o objeto passada para o programador. No exemplo
anterior, objetoTaxa uma referncia para um objeto baseado na classe Taxa. A classe defne um tipo de objeto, mas no um
objeto. Neste caso, podemos entender objetoTaxa como uma varivel do tipo Taxa, exatamente como se tivssemos criado
uma varivel idade do tipo int:
int idade = 23;
A diferena, talvez nem to evidente, o uso da palavra-reservada new. Ela s usada para instanciar novos objetos.
14.6 MODIFICADORES DE ACESSO PARA CLASSES
Os modifcadores de acesso so utilizados para restringir o acesso s classes e a seus membros (atributos e mtodos).
Os modifcadores de acesso de classe permitidos so:
Modifcadores Descrio
public A classe acessvel em qualquer lugar. No h restries.
private Acessvel apenas dentro do contexto em que foi declarada.
protected A classe acessvel somente na prpria classe e nas classes derivadas.
Todo o tipo declarado dentro de uma classe sem um modifcador de acesso considerado, por padro, como private.
Os modifcadores de acesso protected e private s so permitidos em classes aninhadas. Veja o exemplo:
public class Taxas
{
// Cdigo da classe Taxas.
private class Juros
{
// Cdigo da classe Juros.
}
}
Os tipos aninhados so private por padro e podem acessar membros defnidos como private e protected da classe em que
esto contidos. Devemos usar o nome qualifcado completo para acessar os membros de classes aninhadas.
Para criar uma instncia de classe aninhada, usamos:
public static class Livro
{
// Cdigo da classe esttica.
// Membros declarados aqui sero estticos tambm.
}
As classes estticas so carregadas automaticamente pelo CLR quando o programa que contm a classe carregado.
Algumas caractersticas das classes estticas:
Contm somente membros estticos.
No possivel criar uma instncia.
No podem ser implementadas por intermdio de herana.
No podem conter um mtodo construtor.
Membros estticos so teis em situaes em que o membro no precisa estar associado a uma instncia da classe, como,
por exemplo, em situaes que o valor contido no membro no se altera, como o caso do nome do autor contido no campo
55
Linguagem C#
Autor.
public static class Universo {
public static int velocidadeDaLuzEmKmPorSegundo = 300000;
}
Para acessar o campo velocidadeDaLuzEmKmPorSegundo, simplesmente usamos o nome da classe, seguido do ponto e
do nome do campo:
Universo.velocidadeDaLuzEmKmPorSegundo;
Exemplo completo:
public static class Universo
{
public static int velocidadeDaLuzEmKmPorSegundo = 300000;
}
class TesteUniverso
{
static void Main()
{
System.Console.WriteLine(Universo. velocidadeDaLuzEmKmPorSegundo);
}
}
14.7 MTODOS
Um mtodo contm uma srie de instrues. Os mtodos so procedimentos que tm a funo de executar as tarefas
programadas dentro das classes.
Os mtodos devem ser declarados dentro de classes especifcando o nvel de acesso, o valor de retorno, o nome de mtodo
e parmetros (opcional). Os parmetros devem estar dentro de parnteses e separados por vrgula. Parnteses vazios indicam
que o mtodo no requer nenhum parmetro. Sintaxe utilizada pelos mtodos em C#.
[modifcadores-de-acesso] <tipo-de-dados-de-retorno> <nome-do-mtodo>([<tipo-
de-dados-do-parmetro-1> <nome-do-parmetro-1>[, <tipo-de-dados-do-parmetro-2>
<nome-do-parmetro-2>[, <tipo-de-dados-do-parmetro-3> <nome-do-parmetro-3>[,
...]]]])
56
Escola Alcides Maya - Segundo Mdulo
Exemplo:
class Taxas
{
public void Imprimir()
{
}
public int Calculo(int x, int y)]
{
return 0;
}
public string Mensagem(string msg)
{
return msg;
}
}
14.8 MODIFICADORES DE ACESSO PARA MTODOS
Os modifcadores de acesso dos mtodos so os mesmos utilizados com as classes. Quando defnimos a acessibilidade de
um mtodo, devemos ter em mente que um membro de uma classe no pode ter mais privilgios que a classe que a contm.
Exemplo: se uma classe for declarada com o modifcador private, todos os seus membros sero private.
Mtodos declarados dentro de uma classe sem um modifcador de acesso so considerados, por padro, com private.
Confra os modifcadores de mtodos do C#.
Modifcadores Descrio
public O mtodo acessvel em qualquer lugar. No h restries.
private Acessvel apenas dentro do contexto em que foi declarado.
protected O mtodo acessvel somente na prpria classe e nas classes derivadas.
Chamamos um mtodo por intermdio da referncia ao objeto criado a partir da classe que contm o mtodo, seguido
de um ponto, o nome do mtodo e parnteses. Os argumentos, se houver, so listados dentro dos parnteses e separados por
vrgula. No exemplo, utilizamos novamente a classe Taxas que contm os mtodos Imprimir, Calculo e Mensagem.
Exemplo:

Taxas objTax = new Taxas();
objTax.Imprimir();
objTax.Calculo(10, 20);
objTax.Mensagem(Ol Mundo);
A palavra-chave return pode ser utilizada para parar a execuo de um mtodo. Se ela no aparecer, a execuo
encerrada somente no fnal do bloco de cdigo.
Mtodos que contm um valor de retorno diferente de void devem obrigatoriamente utilizar a palavra-chave return
indicando o valor a ser retornado.
57
Linguagem C#
Exemplo 1 retorna uma string
Taxas objTax = new Taxas();
objTax.Imprimir();
objTax.Calculo(10, 20);
objTax.Mensagem(Ol Mundo);
Exemplo 2 interrompe a execuo do mtodo se o parmetro str for nulo:
public string Mensagem(string str)
{
if (str == null)
{
return ;
}
else
{
return str;
}
}
14.9 PARMETROS
Uma das grandes vantagens dos mtodos que eles nos permitem criar subrotinas, pequenos trechos de programa que
se repetem. Ao invs de escrever o cdigo que verifca se um CPF vlido toda a vez que esta operao necessria, por
exemplo, poderamos criar um mtodo validaCPF que executa a tarefa, e o chamaramos toda a vez que necessrio.
Mas isso s se torna uma vantagem efetiva se pudermos passar parmetros para o mtodo, ou seja, se pudermos identifcar
que CPF validar (ao invs de validarmos sempre o mesmo CPF, o que no faria o menor sentido ...).
Parmetros, ento, so pequenas incgnitas no cdigo de um mtodo, incgnitas que sero supridas por quem chamou o
mtodo. Quando declaramos um mtodo que recebe parmetros devemos especifcar o tipo de dados que o parmetro pode
conter.
public void Metodo(int x, int y)
{
System.Console.WriteLine(X: + x);
System.Console.WriteLine(Y: + y);
}
O mtodo, ento, poderia usar os parmetros recebidos para customizar a tarefa a ser executada.
58
Escola Alcides Maya - Segundo Mdulo
14.10 TIPO DE RETORNO
Um mtodo na verdade uma funo, daquelas que aprendemos com as equaes na quinta srie. Uma funo pode
receber um parmetro e tambm pode retornar um valor. Um mtodo pode, por exemplo, receber dois valores e retornar o
primeiro elevado potncia do segundo.
Ou, no caso do exemplo da validao de CPF, retornar um valor booleano que indica se o nmero vlido ou no. Veja
o exemplo.
public boolean validaCPF(string cpf)
{
// Faz a mgica, e verifca se o CPF realmente vlido.
if (/* Qualquer que seja o teste ...*/)
{
return true;
}
// Se chegou at aqui, o CPF no vlido.
return false;
}
14.11 SOBRECARGA DE MTODOS
Cada membro usado por uma classe possui uma assinatura nica. A assinatura de um mtodo consiste do nome do
mtodo, e a sua lista de parmetros.
Podemos declarar numa classe vrios mtodos com o mesmo nome mas com parmetros diferentes. Isso chamado
de sobrecarga de mtodos, cuja principal vantagem a fexibilidade. Um nico mtodo, por exemplo, pode ter vrias
implementaes, dependendo do tipo e nmero de parmetros que recebe.
Veja a seguir o exemplo completo possui quatro implementaes do mtodo teste.
59
Linguagem C#
class Livro
{
public void teste()
{
System.Console.WriteLine(Mtodo teste());
}
public int teste(int i)
{
return i;
}
public string teste(int a, string str)
{
return str + + a;
}
public string teste(string str, int a)
{
return a + + str;
}
}

class TesteLivro
{
static void Main()
{
Livro lv = new Livro();
lv.teste();
Console.WriteLine(lv.teste(8));
Console.WriteLine(lv.teste(10, Segunda string));
Console.WriteLine(lv.teste(Primeira string, 10));
}
}
O exemplo retorna os valores passados a cada implementao do mtodo teste.
Mtodo teste()
8
Segunda string 10
10 Primeira string
60
Escola Alcides Maya - Segundo Mdulo
Preste ateno nas seguintes regras ao usar sobrecarga de mtodos:
Todos os mtodos sobrecarregados devem ter o mesmo nome.
Os mtodos devem ser diferentes entre si em pelo menos um dos seguintes itens:
o Nmero de parmetros;
o Ordem dos parmetros;
o Tipo de dados dos parmetros;
o O tipo de retorno (vlido somente em converses de operadores).
14.12 CONSTRUTORES
Sempre que uma classe criada um mtodo especial chamado. o seu mtodo construtor.. Um mtodo construtor
possiu o mesmo nome da classe em que est deckaradi e no retorna valor, nem mesmo void.
Uma classe pode conter mltiplos construtores com diferentes argumentos. Um construtor sem parmetros chamado de
construtor-padro.
Todas as classes possuem um construtor. Se voc no declarar um construtor o compilador C# criar automaticamente
um construtor-padro para voc.
Usando construtores, um programador pode estabelecer valores-padro ou defnir os valores iniciais dos membros. Veja
o exemplo:
public class Livro
{
public string titulo;
public string autor;
public Livro()
{
titulo = ASP .NET com C#;
autor = Alfredo Lotar;
}
}
No exemplo acima, a defnio dos valores iniciais dos campos titulo e autor, acontece no construtor da classe Livro.
Podemos reescrever o exemplo com novos construtores, usando sobrecarga de mtodos. Veja o exemp
61
Linguagem C#
public class Livro
{
public string titulo;
public string autor;
public Livro()
{
titulo = ASP .NET com C#;
autor = Alfredo Lotar;
}
public Livro(string tit, string aut)
{
titulo = tit;
autor = aut;
}
}
Criando instncia da classe Livro nos dois casos:
Construtor sem parmetros
static void Main(string[] args)
{
Livro umLivro = new Livro();
Livro outroLivro = new Livro(C# Passo a Passo, Microsoft);
}
:
15 OS PRINCPIOS DA PROGRAMAO ORIENTADA A
OBJETOS
15.1 CLASSE
uma estrutura para incorporar os dados e os procedimentos para trabalhar com esses dados. Por exemplo, se voc
estivesse interessado em controlar os dados associados aos produtos no inventrio de uma empresa, criaria uma classe
Produto responsvel por manter e trabalhar com os dados pertinentes aos produtos. Se quisesse ter capacidades de impresso
em sua aplicao, trabalharia com uma classe Impressora, responsvel pelas funcionalidades que exigem a interao com
uma impressora do mundo real.
As caractersticas mais importantes de uma classe que ela se compe basicamente de dois elementos, dados e
comportamento, e que tenta modela um objeto da vida real usando conceitos como abstrao e encapsulamento.
15.2 ABSTRAO
a capacidade de selecionar os atributos que so relevantes para determinada situao. Por exemplo: quando dirijo
meu carro, preciso saber a velocidade do carro e a direo na qual ele est indo. Como boa parte da mecnica do carro
automtica, no preciso saber a quantas RPMs est o motor, ou se a baixa temperatura est fazendo o carro consumir mais,
portanto, fltro essas informaes. Por outro lado, essas informaes seriam crticas para um piloto de carros de corrida, que
no as fltraria.
62
Escola Alcides Maya - Segundo Mdulo
15.3 ENCAPSULAMENTO
Consiste na separao de aspectos internos e externos de um objeto. Este mecanismo utilizado amplamente para impedir
o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os mtodos que alteram estes
estados. Exemplo: para usar o aparelho de telefone, no necessrio conhecimento dos circuitos internos do aparelho ou
como a rede telefnica funciona, basta saber manipular os botes e o fone.
15.4 POLIMORFISMO
Diferentes implementaes de uma mesma funo podem ser usadas conforme as condies atuais (ou conforme o tipo de
dados que voc fornece como argumento). Exemplo: nos carros que usam o controle de trao, acelerar() pode se comportar
de maneira diferente conforme o tipo ou as condies do terreno.
15.5 HERANA
Voc usar a herana na OOP para classifcar os objetos em seus programas, de acordo com as caractersticas comuns e
a funo. Isso torna mais fcil e claro trabalhar com os objetos. Tambm torna a programao mais fcil, porque permite que
voc combine as caractersticas gerais em um objeto-pai e herde essas caractersticas nos objetos-flhos. Por exemplo, poder
defnir um objeto funcionrio, que defne todas as caractersticas gerais do funcionrio, mas tambm adiciona caractersticas
exclusivas aos gerentes em sua empresa. O objeto gerente refetir automaticamente qualquer alterao na implementao do
objeto funcionrio.

Você também pode gostar