Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
ESCOLA
Linguagem de
Programao I
(linguagem C#)
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.
Linguagem C#
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.
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#
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.
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;
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#
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>];
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
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
* -> [] &
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.
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
num1 = int.Parse(Console.ReadLine());
num2 = int.Parse(Console.ReadLine());
else
Console.ReadKey();
13
case <expresso-1>:
case <expresso-2>:
case <expresso-3>:
...
default:
14
Linguagem C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ExemploSwitch
{
class ExemploSwitch
string operador;
valor1 = double.Parse(Console.ReadLine());
valor2 = double.Parse(Console.ReadLine());
operador = Console.ReadLine();
switch (operador)
case +:
resultado);
Console.WriteLine(O
break;
resultado
da
soma
case -:
resultado);
break;
case *:
resultado);
break;
case /:
resultado);
break;
default :
Console.ReadKey();
break;
15
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.
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.
16
Linguagem C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EstruturaDeForI
{
class ContarDezNumeros
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
nome[0] = Rosa;
nome[1] = Marcus;
nome[2] = Ricardo;
nome[3] = Pablo;
nome[4] = Maria;
Console.WriteLine(nome[i]);
Console.ReadKey();
17
class MostrarValores
int i = 1;
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
int num;
int contador = 1;
Console.WriteLine(Digite um nmero: );
num = int.Parse(Console.ReadLine());
contador++;
Console.ReadKey();
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
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>);
class TestandoDo
int i = 11;
do
Console.WriteLine(i);
Console.ReadKey();
20
Linguagem C#
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);
21
class Program
cores[i] = Console.ReadLine();
Console.WriteLine(cor);
Console.ReadKey();
22
Linguagem C#
23
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#
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:
25
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#
27
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
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.
31
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
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.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
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
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
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.
40
Linguagem C#
Propriedade
NAME
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
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.
o 4 Labels
o 3 TextBoxes
o 1 Button
Propriedade
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
NAME
43
NAME
NAME
TEXT
txtValorC
btnVerificar
Verificar
else
}
else if (valorB > valorC)
{
}
else
{
44
Linguagem C#
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
Prorpriedade
NAME
NAME
NAME
NAME
NAME
NAME
NAME
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
NAME
TEXT
45
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
if (chkChoop.Checked == true)
if (chkPetisco.Checked == true)
if (chkRefeicao.Checked == true)
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
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.
}
catch (<tipo-de-exceo> <varivel-de-exceo>)
{
// Cdigo.
Veja um exemplo:
try
{
double n = 5 / 0;
}
catch (System.DivideByZeroException e)
{
47
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.
48
Linguagem C#
try
{
}
catch (DivideByZeroException dbze)
{
}
catch (OverflowException oe)
{
}
catch (ArithmeticException ae)
{
}
catch (Exception e)
{
}
catch (Exception ex)
{
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
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.
50
Linguagem C#
51
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.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
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.
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
Exemplo:
class Taxas
{
public void Imprimir()
{
}
public int Calculo(int x, int y)]
{
return 0;
}
public string Mensagem(string msg)
{
return msg;
}
}
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
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.
58
Linguagem C#
class Livro
{
System.Console.WriteLine(Mtodo teste());
return i;
return str + + a;
return a + + str;
}
class TesteLivro
{
lv.teste();
Console.WriteLine(lv.teste(8));
Console.WriteLine(lv.teste(10, Segunda string));
Console.WriteLine(lv.teste(Primeira string, 10));
59
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 Livro()
titulo = tit;
autor = aut;
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
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