Você está na página 1de 62

Linguagem C#

ESCOLA

Linguagem de
Programao I
(linguagem C#)

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

2 O Ambiente de Desenvolvimento

Linguagem C#

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 configuraes;
O Editor de Projetos (Project Designer), usado para configurar o compilador, caminhos de instalao e demais
recursos;
O Visualizador de Classes (Class View), usado para navegar atravs das classes definidas no seu cdigo fonte;
A Janela de Propriedades (Properties Window), utilizada para definir 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

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


4

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 fim, 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 finalizadas com um ponto-e-vrgula, como voc ver a
seguir:
{
// Cdigo.
}

5.1 Comentrios
Usamos comentrios para descrever partes complexas de cdigo, a fim 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.

Escola Alcides Maya - Segundo Mdulo


// Nosso primeiro programa em C#.
Blocos de Texto: os caracteres /* e */ definem 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;
}

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.

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 definir o tipo de dados e o escopo (local onde a varivel estar acessvel). O escopo
definido pelos modificadores 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
codificao na definio 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#
bool
byte
char
decimal

Tipo .NET
System.Boolean
System.Byte
System.Char
System.Decimal

double

System.Double

float

System.Single

int
long

System.Int32
System.Int64

Object
Sbyte
Short
String
Uint
Ulong
Ushort

System.Object
System.Sbyte
System.Int16
System.String
System.UInt32
System.UInt64
System.UInt16

Descrio
Booleano
Inteiro de 8-bit com sinal
Caracter Unicode de 16-bit
Inteiro de 96-bit com sinal com
28-29 dgitos
Flutuante IEEE 64-bit com 1516 dgitos significativos
Flutuante IEEE 32-bit com 7
dgitos significativos
Inteiro de 32-bit com sinal
Inteiro de 64-bit com sinal
Classe base
Inteiro de 8-bit sem sinal
Inteiro de 16-bit com sinal
String de caracteres Unicode
Inteiro de 32-bit sem sinal
Inteiro de 64-bit sem sinal
Inteiro de 16-bit sem sinal

Faixa de dados
true ou false
-127 a 128
U+0000 a U+ffff
1,0 10-28 a 7,9 1028
5,0 10-324 a 1,7 10308
1,5 10-45 a 3,4 1038
-2.147.483.648 a 2.147.483.647
9,223,372,036,854,775,808 a
9,223,372,036,854,775,807
0 a 255
-32,768 a 32,767
0 a 4,294,967,295
0 a 18,446,744,073,709,551,615
0 a 65,535

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
System,Convert.ToBoolean()
System,Convert.ToByte()
System,Convert.ToChar()
System,Convert.ToDateTime()
System,Convert.ToDecimal()
System,Convert.ToDouble()
System,Convert.ToInt16()
System,Convert.ToInt32()
System,Convert.ToInt64()
System,Convert.ToSingle()
System,Convert.ToString()

Descrio
Converte uma string para um valor booleano
Converte para o tipo byte
Converte para o tipo char
Converte para o tipo data e hora
Converte para o tipo decimal
Converte para o tipo doubl
Converte para o tipo short
Converte para o tipo inteiro
Converte para o tipo long
Converte para o tipo single
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
sbyte
byte
short
ushort
int
uint
long
ulong
char
float

Para
short, int, long, float, double ou decimal
short, ushort, int, uint, long, float, double ou decimal
int, long, float, double ou decimal
int, uint, long, ulong, float, double ou decimal
long, float, double ou decimal
long, ulong, float, double ou decimal
float, double ou decimal
float, double ou decimal
ushort, int, uint, long, ulong, float, double ou decimal
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 definir 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;

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;

10

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)
Concatenao de string
Incremento e decremento
Shift
Relacional
Atribuio
Acesso a membro
Indexao
Cast
Condicional
Delegate (concatenao e remoo)
Criao de objeto
Informao de tipo
Controle de excesso de overflow
Indireo e endereo

11

+-*/%
& | ^ ! ~ && || true false
+
++ -<< >>
== != < > <= >=
= += -= *= /= %= &= |= ^= <<=
>>=
.
[]
()
?:
+new
is sizeof typeof
checked unchecked
* -> [] &

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.);
}

12

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)

else

Console.WriteLine(O maior nmero + num1);

Console.WriteLine(O maior nmero + num2);

Console.ReadKey();

13

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 verifique se o mesmo par ou mpar.
Solicite que o usurio informe um valor inteiro e verifique 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.

14

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

resultado = valor1 + valor2;

Console.WriteLine(O

break;

resultado

da

soma

case -:

resultado = valor2 - valor1;


resultado);

Console.WriteLine(O resultado da subtrao : +

break;

case *:



resultado);

resultado = valor1 * valor2;

Console.WriteLine(O resultado da multiplicao : +

break;

case /:

resultado = valor1 / valor2;


resultado);

Console.WriteLine(O resultado da diviso : +

break;

default :

Console.ReadKey();

break;

15

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
inicializao
teste
incremento

Descrio
Inicializa a varivel de controle, usada para contar as execues do loop.
Teste que decide se o corpo do loop deve ou no ser executado.
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(), codifique conforme exemplo mostrado
abaixo.

16

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();

17

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

18

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

19

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 fim, 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();

20

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
tipo
elemento
coleo

Descrio
o tipo de dados utilizado pela varivel (elemento).
a varivel utilizada para percorrer os itens da coleo ou array.
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 fim, insira o cdigo marcado em negrito abaixo dentro do mtodo principal
Main():

21

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 grficas (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:

22

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

23

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
definiremos 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 significado. 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 configurao atravs do painel de propriedades. Vamos brincar com isso em seguida.

24

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 grfica 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 fica 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 finos. Nesta etapa faremos os diferentes controles
mostrarem as informaes que desejamos, assim como podemos fazer outros ajustes na parte visual, como cores e outras
firulas.
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.

25

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:

26

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

27

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

28

Linguagem C#
Na figura 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:

29

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

30

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 artificiais 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:

31

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

32

Linguagem C#
Principais Propriedades
Propriedade
AcceptButton
BackColor
BackgroundImage
BackgroundImageLayout
Bounds
CancelButton
ContextMenuStrip
ControlBox
Cursor
Enabled
Focused
FormBorderStyle
Icon
IsMDIContainer
Location
MainMenuStrip
MaximizeBox
MinimizeBox
Opacity
ShowIcon
Size
Text
Visible
WindowState

Descrio
Permite indicar o boto que ser ativado ao se pressionar Enter quando
o formulrio tem o foco do teclado.
Permite indicar a cor de fundo da janela.
Permite indicar uma imagem para ser usada como fundo da janela.
Permite indicar a maneira como a imagem de fundo ser usada para
preencher a janela.
Indica o tamanho e a localizao do formulrio em relao ao seu
controle pai.
Permite indicar o boto que ser ativado ao se pressionar Esc quando a
janela tem o foco do teclado.
Indica o menu de contexto a exibir quando o usurio clica com o boto
direito sobre o formulrio.
Permite indicar se a janela ter ou no uma caixa de controle no canto
esquerdo da sua barra de ttulo.
Permite indicar o cursor a usar quando o ponteiro do mouse
posicionado sobre a janela.
Permite habilitar e desabilitar o formulrio.
Indica se este formulrio tem ou no o foco.
Permite indicar o tipo de borda da janela.
Permite indicar o cone associado a esta janela.
Indica se este formulrio um continer MDI (multi-document
interface).
Indica as coordenadas do canto superior esquerdo da janela.
Permite especificar a barra de menus a ser usada por esta janela.
Permite indicar se o boto de maximizar estar visvel na barra de ttulo
da janela.
Permite indicar se o boto de minimizar estar visvel na barra de ttulo
da janela.
Indica a opacidade da janela.
Indica se o cone da janela deve estar visvel na barra de ttulo.
Indica o tamanho do formulrio.
Indica o ttulo da janela.
Indica se o formulrio est visvel ou no.
Indica o estado da janela (normal, minimizada ou maximizada).

33

Escola Alcides Maya - Segundo Mdulo

Principais Eventos

Evento
Activated
Click
Closed
Closing
Deactivated
DoubleClick
EnabledChanged
GotFocus
Load
LostFocus
Resize
TextChanged
VisibleChanged

Descrio
Lanado quando o formulrio ativado via cdigo ou
diretamente pelo usurio.
Lanado quando o usurio clica no formulrio.
Lanado quando o formulrio fechado.
Lanado quando o formulrio est sendo fechado.
Lanado quando o formulrio perde o foco e no mais o
form ativo.
Lanado quando o formulrio recebe um duplo clique.
Lanado quando o formulrio habilitado ou desabilitado.
Lanado quando o formulrio recebe o foco.
Lanado quando o formulrio exibido pela primeira vez
desde que a aplicao foi iniciada.
Lanado quando o formulrio perde o foco.
Lanado quando o tamanho do formulrio modificado.
Lanado quando o ttulo da janela alterado.
Lanado quando a propriedade Visible alterada.

Principais Mtodos
Mtodo
Activate
BringToFront
Close
Dispose
Focus
Hide
SendToBack
Show
ShowDialog

Descrio
Ativa o formulrio e lhe d foco.
Traz o formulrio para frente.
Fecha o formulrio.
Libera os recursos usados pelo formulrio.
D o foco ao formulrio.
Oculta o formulrio.
Envia o formulrio para trs.
Exibe o formulrio.
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.

34

Linguagem C#
Principais Propriedades
Propriedade
BackgroundImage
BackgroundImageLayout
Cursor
Enabled
Font
Image
ImageAlign
Size
TabStop
Text
TextAlign
Visible

Descrio
Permite indicar a imagem de fundo do boto.
Permite indicar o tipo de layout a usar quando exibindo
a imagem de fundo do boto.
Permite indicar o cursor que aparece quando o mouse
colocado sobre o boto.
Indica se o boto est habilitado ou no.
Indica a fonte usada para exibir o texto do boto.
Indica a imagem dentro do boto.
Indica o tipo de alinhamento da imagem dentro do
boto.
Indica as dimenses do boto (Width a largura, Height
a altura).
Indica se o usurio pode usar a tecla Tab para dar foco
no boto.
Indica o texto mostrado pelo boto.
Indica o alinhamento do texto dentro do boto.
Indica se o boto est visvel ou no.

Principais Eventos
Evento
Click
EnabledChanged
VisibleChanged

Descrio
Lanado quando o boto clicado.
Lanado quando o boto habilitado ou desabilitado
programaticamente (veja a propriedade enabled).
Lanado quando o boto exibido ou ocultado programaticamente
(veja o mtodo hide() e a propriedade Visible).

Principais Mtodos
Mtodo
BringIntoView
Focus
MoveFocus

Descrio
Tenta trazer o boto para a rea visvel da tela, rolando o seu continer
se necessrio/possvel.
Tenta colocar o foco do teclado neste boto.
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.

35

Escola Alcides Maya - Segundo Mdulo

Principais Propriedades
Propriedade
BackColor
Checked
CheckState
Enabled
Focused
Font
TabIndex
Text
Visible

Descrio
Determina a cor de fundo do checkbox.
Determina se o checkbox est marcado ou no.
Determina o estado do checkbox.
Determina se o controle est habilitado.
Determina se o controle tem o foco.
Permite indicar a fonte a ser usada pelo checkbox.
L ou altera a ordem de foco deste controle dentro do seu controle-pai.
O texto exibido por este checkbox.
Permite indicar se o checkbox deve estar visvel ou no.

Primcipais Eventos
Evento
Click
EnabledChanged

Descrio
Lanado quando o checkbox clicado.
Lanado quando o checkbox habilitado ou desabilitado programaticamente
(veja a propriedade enabled).
Lanado quando o checkbox recebe o foco.
Lanado quando o checkbox perde o foco.
Lanado quando o checkbox exibido ou ocultado programaticamente
(veja o mtodo hide() e a propriedade Visible).

GotFocus
LostFocus
VisibleChanged

Principais Mtodos
Mtodo
BringToFront
Focus
Hide
SendToBack
Show

Descrio
Traz este controle para frente.
D foco no checkbox.
Oculta o checkbox.
Envia este controle para trs.
Exibe este controle.

12.4 Label
Um label oferece uma maneira conveniente de exibir uma informao ao usurio.
Principais Propriedades
Propriedade
BackColor
Enabled
Font
Text
TextAlign
Visible

Descrio
Determina a cor de fundo do label.
Determina se o controle est habilitado.
Permite indicar a fonte a ser usada pelo checkbox.
O texto exibido por este label.
Indica o alinhamento de texto neste controle.
Permite indicar se o checkbox deve estar visvel ou no.

36

Linguagem C#
Primcipais Eventos
Evento
VisibleChanged

Descrio
Lanado quando o checkbox exibido ou ocultado programaticamente (veja o
mtodo hide() e a propriedade Visible).

Principais Mtodos
Mtodo
BringToFront
Hide
SendToBack
Show

Descrio
Traz este controle para frente.
Oculta o label.
Envia este controle para trs.
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
BackColor
Enabled
Focused
Font
Items
SelectedIndex
SelectedIndices
SelectedItem
SelectredItems
TabIndex
Text
Visible

Descrio
Determina a cor de fundo do listbox.
Determina se o controle est habilitado.
Determina se o controle tem o foco.
Permite indicar a fonte a ser usada pelo checkbox.
D acesso lista de opes contidas neste ListBox.
Indica o ndice da opo selecionada, se houver.
Indica os ndices das opes selecionadas, se houver.
L ou altera a opo selecionada.
L a lista de opes selecionadas.
L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Indica o texto da opo correntemente selecionada, se houver uma nica.
Permite indicar se o checkbox deve estar visvel ou no.

Primcipais Eventos
Evento
EnabledChanged
GotFocus
LostFocus
SelectedIndexChanged
SelectedValueChanged
VisibleChanged

Descrio
Lanado quando o listbox habilitado ou desabilitado programaticamente
(veja a propriedade enabled).
Lanado quando o listbox recebe o foco.
Lanado quando o listbox perde o foco.
Lanado quando a propriedade SelectedIndex ou SelectedIndices muda.
Lanado quando a propriedade SelectedValue muda.
Lanado quando o checkbox exibido ou ocultado programaticamente (veja
o mtodo hide() e a propriedade Visible).

37

Escola Alcides Maya - Segundo Mdulo

Principais Mtodos

Mtodo
BringToFront
Focus
Hide
SendToBack
Show

Descrio
Traz este controle para frente.
D foco no checkbox.
Oculta o checkbox.
Envia este controle para trs.
Exibe este controle.

12.6 PictureBox
O controle PictureBox oferece o recurso de exibir imagens dentro de um formulrio
Principais Propriedades
Propriedade
BackColor
Enabled
Focused
Image
ImageLocation
TabIndex
Visible

Descrio
Determina a cor de fundo do picturebox.
Determina se o controle est habilitado.
Determina se o controle tem o foco.
Permite ler ou indicar a imagem a ser exibida dentro do controle.
Permite ler ou indicar o caminho ou URL at a imagem a ser exibida pelo controle.
L ou altera a ordem de foco deste controle dentro do seu controle-pai.
Permite indicar se o picturebox deve estar visvel ou no.

Primcipais Eventos
Evento
Click
DoubleClick
EnabledChanged
GotFocus
LostFocus
VisibleChanged

Descrio
Lanado quando o picturebox clicado.
Lanado quando o picturebox recebe um duplo clique.
Lanado quando o picturebox habilitado ou desabilitado programaticamente
(veja a propriedade enabled).
Lanado quando o picturebox recebe o foco.
Lanado quando o picturebox perde o foco.
Lanado quando o checkbox exibido ou ocultado programaticamente (veja
o mtodo hide() e a propriedade Visible).

Principais Mtodos
Mtodo
BringToFront
Focus
Hide
Load
SendToBack
Show

Descrio
Traz este controle para frente.
D foco no picturebox.
Oculta o picturebox.
Exibe uma imagem no picturebox.
Envia este controle para trs.
Exibe este controle.

12.7 RadioButton
O controle RadioButton oferece uma srie de opes das quais o usurio pode selecionar apenas uma.

38

Linguagem C#
Principais Propriedades
Propriedade
BackColor
Checked
Enabled
Focused
Font
TabIndex
Text
Visible

Descrio
Determina a cor de fundo do checkbox.
Determina se o radiobutton est marcado ou no.
Determina se o controle est habilitado.
Determina se o controle tem o foco.
Permite indicar a fonte a ser usada pelo checkbox.
L ou altera a ordem de foco deste controle dentro do seu controle-pai.
O texto exibido por este radiobutton.
Permite indicar se o checkbox deve estar visvel ou no.

Primcipais Eventos
Evento
CheckedChanged
Click
EnabledChanged
GotFocus
LostFocus
VisibleChanged

Descrio
Lanado quando o atributo Checked muda.
Lanado quando o radiobutton clicado.
Lanado quando o radiobutton habilitado ou desabilitado programaticamente (veja
a propriedade enabled).
Lanado quando o radiobutton recebe o foco.
Lanado quando o radiobutton perde o foco.
Lanado quando o radiobutton exibido ou ocultado programaticamente (veja o
mtodo hide() e a propriedade Visible).

Principais Mtodos
Mtodo
BringToFront
Focus
Hide
SendToBack
Show

Descrio
Traz este controle para frente.
D foco no radiobutton.
Oculta o radiobutton.
Envia este controle para trs.
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
AcceptReturn
AcceptTab
BackColor
CanUndo
Enabled
Focused
Font
Modified
Multilline
PasswordChar
ReadOnly
ScrollBars
SelectedText

Descrio
Determina se este textbox pode receber caracteres de quebra de linha.
Determina se este textbox pode receber caracteres de tabulao.
Determina a cor de fundo do textbox.
Determina se o usurio pode desfazer a ltima ao dentro deste controle.
Determina se o controle est habilitado.
Determina se o controle tem o foco.
Permite indicar a fonte a ser usada pelo textbox.
Determina se o texto armazenado por este controle foi modificado pelo usurio.
Determina se este textbox pode receber mltiplas linhas de texto.
L ou altera o caractere usado para ocultar senhas em um textbox de uma nica linha.
Indica se este textbox de apenas leitura.
Indica se este componente deve mostrar barras de rolagem.
L ou indica o texto a aparecer selecionado dentro do componente,

39

Escola Alcides Maya - Segundo Mdulo


SelectionLength
SelectionStart
TabIndex
Text
TextAling
TextLength
Visible
WordWrap

Indica o nmero de caracteres selecionados dentro deste controle.


Indica o ndice do primeiro caractere selecionando dentro deste controle.
L ou altera a ordem de foco deste controle dentro do seu controle-pai.
O texto exibido por este textbox.
Indica o tipo de alinhamento de texto dentro deste controle.
Indica o nmero de caracteres armazenados dentro deste controle.
Permite indicar se o textbox deve estar visvel ou no.
Indica se o componente deve quebrar as linhas automaticamente sempre que necessrio.

Primcipais Eventos
Evento
EnabledChanged
GotFocus
KeyPress
LostFocus
TextChanged
VisibleChanged

Descrio
Lanado quando o textbox habilitado ou desabilitado programaticamente (veja
a propriedade enabled).
Lanado quando o textbox recebe o foco.
Lanado toda a vez que uma tecla pressionada dentro do controle.
Lanado quando o textbox perde o foco.
Lanado quando o texto armazenado pelo textbox modificado.
Lanado quando o textbox exibido ou ocultado programaticamente (veja o
mtodo hide() e a propriedade Visible).

Principais Mtodos
Mtodo
BringToFront
Cut
Focus
Hide
Paste
Select
SelectAll
SendToBack
Show

Descrio
Traz este controle para frente.
Move o texto atualmente selecionado no controle para a rea de transferncia.
D foco no textbox.
Oculta o textbox.
Substitui o texto atualmente selecionado no controle por aquele armazenado na rea de
transferncia.
Ativa este textbox.
Seleciona todo o texto dentro deste textbox.
Envia este controle para trs.
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

40

Linguagem C#

Altere as seguintes propriedades dos componentes:


Componente
Label1
Label2
Label3
Label4
Label4
TextBox1
TextBox2
TextBox3
TextBox4
Button1
RadioButton1
RadioButton2

Propriedade
NAME

Texto a ser inserido


lblNome

TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
NAME
NAME
NAME
NAME
TEXT
TEXT
TEXT

Nome
lblSalarioBruto
Salrio Bruto
lblFuncao
Funo
lblValorVendas
Valor de Vendas
lblSalarioReceber
Salrio a Receber
txtNome
txtSalarioBruto
txtValorVenda
txtSalarioReceber
btnCalcular
Calcular
Vendedor
Outros

Clique com o boto direito do mouse sobre o formulrio e selecione a opo View Code. Em seguida declare as
seguintes variveis.

41

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);
}
}

42

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 flutuante 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 verifique 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
Label1
Label2
Label3
Label4
TexBox1
TexBox2

Propriedade
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
NAME

43

Texto a ser inserido


lblValorA
Valor A
lblValorB
ValorB
lblValorC
Valor C
lblResposta
(deixar vazio)
txtValorA
txtValorB

Escola Alcides Maya - Segundo Mdulo


TexBox3
Button1

NAME
NAME
TEXT

txtValorC
btnVerificar
Verificar

Faa a declarao das variveis.


Insira no evento CLICK do boto o seguinte cdigo:
public partial class frmMaiorValorDeTres : Form
{
public frmMaiorValorDeTres()
{
InitializeComponent();

private void btnVerificar_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)

else

lblResposta.Text = O Maior Valor o A ;

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;

44

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
TextBox1
TextBox2
TextBox3
TextBox4
TextBox5
TextBox6
TextBox7
Label1
Label2
Label3
Label4
Label5

Prorpriedade
NAME
NAME
NAME
NAME
NAME
NAME
NAME
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT

45

Texto a ser inserido


txtNumMesa
txtQtdChoop
txtQtdPetiscos
txtQtdRefeicao
txtTotalParcial
txtTaxaServico
txtTotalPagar
lblNumMesa
N. Mesa
lblPedidos
Pedidos
lblQuantidade
Quantidade
lblTotalParcial
Total Parcial
lblTaxaServico
Taxa de Servio (8%)

Escola Alcides Maya - Segundo Mdulo


Label6
Button1
CheckBox1
CheckBox2
CheckBox3

NAME
TEXT
NAME
NAME
TEXT
NAME
TEXT
NAME
TEXT

lblTotalPagar
Total a Pagar
btnVerificar
chkChoop
Choop R$ 4,90
chkPetisco
Petisco R$ 7,90
chkRefeicao
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.

46

13 Tratamento Estruturado de Excees

Linguagem C#

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 especfico 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, finally e throw:
Instruo
try

catch
finally

throw

Descrio
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.
Contm o cdigo usado para tratar um determinado tipo de erro.
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.
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.);

47

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
System.ApplicationException
System.ArgumentException
System.ArithmeticException

System.ArrayTypeMismatchException

System.DivideByZeroException
System.FormatException
System.IndexOutOfRangeException

System.InvalidCastException

System.NotFiniteNumberException
System.NullReferenceException
System.OutOfMemoryException

System.OverflowException

System.StackOverflowException

System.TypeInitializationException

Causa
Lanada quando ocorre um erro no-fatal de aplicao.
Lanada quando um argumento para um mtodo no vlido.
Uma classe base para excees que ocorrem durante uma
operao aritimtica, como por exemplo DivideByZeroException e
OverflowException
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.
Lanada quando ocorre uma tentativa de dividir um valor integral
por zero.
Lanada quando o formato de um argumento no corresponde ao
parmetro especificado pelo mtodo invocado.
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.
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.
Ocorre quando uma operao de ponto flutuante resulta em infinito
(seja positivo ou negativo) ou em um NaN (Not a Number).
Ocorre quando voc tenta acessar um objeto cujo valor corrente
nulo.
Lanada quando uma tentativa de alocar memria usando o
operador new falha. Isso indica que a memria disponvel para o CLR
foi completamente exaurida.
Lanada quando uma operao aritimtica gera um valor maior
do que o maior valor possvel de se armazenar em um dado tipo de
dados.
Lanada quando a pilha de execuo estourada por se ter muitas
chamadas de mtodos pendentes. Isso normalmente indica uma
recurso profunda demais ou mesmo infinita.
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 OverflowException estendemArithmeticException,
ento, ao tentar trat-las, coloque primeiro as subclasses para depois tratar a superclasse. Veja o exemplo.

48

Linguagem C#
try
{

// Cdigo que pode lanar uma exceo aritmtica

}
catch (DivideByZeroException dbze)
{

// Cdigo para tratar uma diviso por zero.

}
catch (OverflowException oe)
{

// Cdigo para tartar um erro de overflow.

}
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 fisicamente 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 financeira e quer
notificar 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.

49

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.
}
finally
{
// 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 significado dessa mudana, e o porqu de uma massiva migrao de profissionais 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 dificulta a
reunio desses elementos em unidades, fazendo com que os sistemas resultantes sejam muito complexos.

50

Linguagem C#

14.3 Modelo Orientado a Objetos


A organizao dos elementos: funes e dados ficam numa mesma rea de memria, em uma mesma estrutura
computacional. Assim, a construo de sistemas torna-se mais simples.

51

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 define 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 filme, 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 modificao 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 ficado claro, ento vale a pena reforar: uma classe um tipo de dados, o tipo de dados mais
poderoso do C#. Classes definem 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.

52

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 modificador de acesso. Sintaxe:
[modificadores] 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 definido 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 definidos como modelos de classes
Usam propriedades para obter e modificar 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 define 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:

53

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 define 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 modificadores de acesso so utilizados para restringir o acesso s classes e a seus membros (atributos e mtodos).
Os modificadores de acesso de classe permitidos so:
Modificadores
public
private
protected

Descrio
A classe acessvel em qualquer lugar. No h restries.
Acessvel apenas dentro do contexto em que foi declarada.
A classe acessvel somente na prpria classe e nas classes derivadas.

Todo o tipo declarado dentro de uma classe sem um modificador de acesso considerado, por padro, como private.
Os modificadores 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 definidos como private e protected da classe em que
esto contidos. Devemos usar o nome qualificado 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

54

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 especificando 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#.
[modificadores-de-acesso] <tipo-de-dados-de-retorno> <nome-do-mtodo>([<tipode-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>[,
...]]]])

55

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 modificadores de acesso dos mtodos so os mesmos utilizados com as classes. Quando definimos 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 modificador private, todos os seus membros sero private.
Mtodos declarados dentro de uma classe sem um modificador de acesso so considerados, por padro, com private.
Confira os modificadores de mtodos do C#.
Modificadores
public
private
protected

Descrio
O mtodo acessvel em qualquer lugar. No h restries.
Acessvel apenas dentro do contexto em que foi declarado.
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 final 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.

56

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 verifica 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 identificar
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 especificar 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.

57

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

58

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

59

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 definir 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 definio 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

60

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, filtro essas informaes. Por outro lado, essas informaes seriam crticas para um piloto de carros de corrida, que
no as filtraria.

61

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 classificar 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-filhos. Por exemplo, poder
definir um objeto funcionrio, que define todas as caractersticas gerais do funcionrio, mas tambm adiciona caractersticas
exclusivas aos gerentes em sua empresa. O objeto gerente refletir automaticamente qualquer alterao na implementao do
objeto funcionrio.

62