Professional Documents
Culture Documents
ESCOLA
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. }
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;
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 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 Operadores +-*/% & | ^ ! ~ && || true false + ++ -<< >> == != < > <= >= = += -= *= /= %= &= |= ^= <<= >>= . [] () ?: +new is sizeof typeof checked unchecked * -> [] &
11
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
static void Main(string[] args) { } } } // Testando o maior valor entre dois valores int num1, num2; Console.WriteLine(Digite o primeiro valor: ); num1 = int.Parse(Console.ReadLine()); Console.WriteLine(Digite o segundo valor: ); num2 = int.Parse(Console.ReadLine()); if (num1 > num2) { Console.WriteLine(O maior nmero + num1); } else { Console.WriteLine(O maior nmero + num2); } Console.ReadKey();
13
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 = valor1 + valor2; Console.WriteLine(O break; resultado = valor2 - valor1; Console.WriteLine(O resultado da subtrao : + break; resultado = valor1 * valor2; Console.WriteLine(O resultado da multiplicao : + break; resultado = valor1 / valor2; Console.WriteLine(O resultado da diviso : + break; break; resultado da soma : + case -: case *: case /: default : resultado);
resultado);
resultado);
resultado); }
} }
Console.ReadKey();
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.
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
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.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>);
static void Main(string[] args) { } } int i = 11; do { Console.WriteLine(i); } while (i <= 10); Console.ReadKey();
20
Linguagem C#
foreach (<tipo> <elemento> in <coleo>) { // Cdigo a ser executado uma vez para cada elemento da // 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
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();
} } } }
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
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#
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.
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#
Nosso Formulrio editado OK, a parte visual da nossa primeira aplicao est pronta. Agora precisamos adicionar-lhe um pouco de inteligncia ...
27
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.
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
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.
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
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 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). 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 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 Primcipais Eventos
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).
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 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). 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.
37
Principais Mtodos
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 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). 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.
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 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). 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.
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
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#
Altere as seguintes propriedades dos componentes: Componente Label1 Label2 Label3 Label4 Label4 TextBox1 TextBox2 TextBox3 TextBox4 Button1 RadioButton1 RadioButton2 Propriedade NAME TEXT NAME TEXT NAME TEXT NAME TEXT NAME TEXT NAME NAME NAME NAME NAME TEXT TEXT TEXT Texto a ser inserido lblNome 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.
Altere as seguintes propriedades dos componentes Componente Label1 Label2 Label3 Label4 TexBox1 TexBox2 Propriedade NAME TEXT NAME TEXT NAME TEXT NAME TEXT NAME NAME Texto a ser inserido lblValorA Valor A lblValorB ValorB lblValorC Valor C lblResposta (deixar vazio) txtValorA txtValorB
43
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) { } else if (valorB > valorC) { } else { } } } lblResposta.Text = O Maior Valor o C; lblResposta.Text = O Maior Valor o B; if (valorA > valorC) { lblResposta.Text = O Maior Valor o A ; } else { lblResposta.Text = O Maior Valor o C; }
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
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 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%)
45
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 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 finally
throw
Veja um exemplo:
try { } catch (System.DivideByZeroException e) { } System.Console.WriteLine(Tentamos dividir por zero.); System.Console.WriteLine(Um erro foi lanado.); double n = 5 / 0;
47
System.ArrayTypeMismatchException
System.InvalidCastException
System.OverflowException
System.StackOverflowException
System.TypeInitializationException
48
Linguagem C#
try { } catch (DivideByZeroException dbze) { } catch (OverflowException oe) { } catch (ArithmeticException ae) { } catch (Exception e) { } // Cdigo para tratar uma exceo qualquer. // Cdigo para tratar alguma outra exceo aritmtica. // Cdigo para tartar um erro de overflow. // Cdigo para tratar uma diviso por zero. // Cdigo que pode lanar uma exceo aritmtica
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.
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:
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.
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;
58
Linguagem C#
class Livro { } class TesteLivro { static void Main() { Livro lv = new Livro(); public void teste() { } public int teste(int i) { } public string teste(int a, string str) { } public string teste(string str, int a) { }
System.Console.WriteLine(Mtodo teste());
return i;
return str + + a;
return a + + str;
O exemplo retorna os valores passados a cada implementao do mtodo teste. Mtodo teste() 8 Segunda string 10 10 Primeira string
59
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) {
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.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