Sunteți pe pagina 1din 148

Introdução ao C#

Microsoft Visual C# 2005, pronunciado C sharp, é uma linguagem de programação


projetada para criar uma ampla variedade de aplicativos executados no .NET
Framework.

C# é simples, poderoso, com segurança de tipos, e orientada a objetos.

Com suas muitas inovações, C# permite o desenvolvimento rápido de


aplicativos mantendo a expressividade e elegância das linguagens do estilo C.

O Visual Studio oferece suporte ao Visual C# com um editor de códigos completo,


modelos de projeto, designers, assistentes de código, depurador poderoso e de fácil
uso, e outras ferramentas.

A biblioteca de classes do .NET Framework fornece acesso a uma grande variedade


de serviços do sistema operacional e outras classes úteis, e bem estruturadas que
aceleram o ciclo de desenvolvimento significativament

Linguagem C#

C# é uma linguagem elegante orientada a objetos e fortemente tipada que permite


aos desenvolvedores criar uma ampla variedade de aplicativos seguros e eficientes
que são executados sob o .NET Framework.

Você pode usar C# para criar aplicativos clientes tradicionais do Windows , XML
Web services, componentes distribuídos, aplicativos cliente-servidor, aplicativos de
banco de dados, e muito, muito mais.
Microsoft Visual C# 2005 fornece um editor de código avançado, designers de
interface de usuário convenientes, depurador integrado, e muitas outras
ferramentas para facilitar o rápido desenvolvimento de aplicativos com base na
versão 2.0 da linguagem C# e do .NET Framework.

Introdução à linguagem C#

Abaixo uma rápida descrição das principais características da linguagem C#.

Observação
Não se preocupe se não entender algumas palavras e conceitos.
Estes assuntos serão abordados ao longo do curso.

A sintaxe C# é altamente expressiva, mas com menos de 90 palavras-chave,


também é simples e fácil para aprender.

A sintaxe do C# utilizando chaves como marcador de blocos será instantaneamente


reconhecível para qualquer pessoa familiarizada com C, C++ ou Java.

Os desenvolvedores que conhecem qualquer uma dessas linguagens são


normalmente capazes de começar a trabalhar produtivamente em C# dentro de
muito pouco tempo.

C# também oferece suporte a métodos e tipos genéricos, que fornecem aumento


de segurança e desempenho, e iteradores, que permitem implementadores das
classes de coleção definirem comportamentos personalizados da iteração que são
simples para usar pelo código do cliente.

Como uma linguagem orientada a objetos, C# suporta os conceitos de


encapsulamento, herança e polimorfismo.

Todas as variáveis e métodos, incluindo o método Main, ponto de entrada do


aplicativo, são encapsulados em classes .
Uma classe pode herdar diretamente de uma classe pai, mas ela pode implementar
qualquer número de interfaces.

Métodos que substituem métodos virtuais em uma classe pai exigem a palavra-
chave override como uma forma para evitar redefinição acidental.

No C#, uma estrutura é como uma classe simplificada; ele é um tipo alocado na
pilha que pode implementar interfaces mas não tem suporte a herança

Além desses princípios orientados a objetos, C# facilita o desenvolvimento de


componentes de software através de vários construtores inovadores da linguagem,
incluindo:

• Assinaturas de métodos encapsulados chamadas delegações, que permitem


notificações de eventos fortemente tipados.
• Propriedades, que servem como acessadores de variáveis membros
privadas.
• Atributos, que fornecem metadados declarativos sobre tipos no tempo de
execução.
• Comentários internos da documentação XML.
Se você precisar interagir com outro software Windows como objetos COM ou DLLs
nativas Win32, você pode fazer isso em C# através de um processo denominado
"Interoperabilidade".

Interoperabilidade permite que programas C# façam praticamente tudo que um


aplicativo C++ nativo pode fazer.

C# também suporta ponteiros e o conceito de código "inseguro" para os casos no


qual o acesso direto à memória é absolutamente essencial.

O processo de compilação C# é simples comparado ao C e C++ e mais flexível do


que em Java.

Não há nenhum arquivo cabeçalho separado, e nenhum requisito de que métodos e


tipos sejam declarados em uma ordem específica.

Um arquivo fonte C# pode definir qualquer número de classes, estruturas,


interfaces, e eventos.

Arquitetura da plataforma .NET

Programas C# são executados no .NET Framework, um componente integrante do


Windows que inclui um sistema de execução virtual chamado de Common
Language Runtime (CLR) e um conjunto unificado de bibliotecas de classe.

O CLR é implementação comercial da Microsoft do Common Language


Infrastructure (CLI), um padrão internacional que é a base para criar ambientes de
execução e desenvolvimento nos quais linguagens e bibliotecas trabalham
perfeitamente juntas.

Código fonte escrito em C# é compilado em uma linguagem intermediária (IL)


que está em conformidade com a especificação CLI.

O código IL, juntamente com recursos como bitmaps e seqüências de caracteres, é


armazenado em disco em um arquivo executável chamado de assembly,
normalmente com uma extensão .exe ou .dll.

Um assembly contém um manifesto que fornece informações sobre tipos do


assembly, versão, cultura, e requisitos de segurança.
Quando o programa C# é executado, o módulo (assembly) é carregado no CLR, que
pode levar a várias ações com base nas informações no manifesto.

Em seguida, se os requisitos de segurança forem atendidos, o CLR executa a


compilação Just-In-Time (JIT) para converter o código IL em instruções nativas da
máquina.

O CLR também oferece outros serviços relacionados à coleta de lixo automática,


tratamento de exceção, e gerenciamento de recursos.

Código que é executado pelo CLR é às vezes conhecido como "código


gerenciado", em contraste com "código não gerenciado" que é compilado em
linguagem de máquina nativa que atinge um sistema específico.

Diagrama de um Projeto

O diagrama a seguir ilustra os relacionamentos entre o tempo de compilação e o


tempo de execução dos arquivos de código fonte C#, as bibliotecas de classes
base, módulos (assemblies), e o CLR.

A interoperabilidade da linguagem é um recurso chave do .NET Framework.

Por estar em conformidade com o Common Type Specification (CTS), o código IL


produzido pelo compilador C# pode interagir com código que foi gerado a partir das
versões .NET do Visual Basic, Visual C++, Visual J#, ou qualquer uma das outras
mais de 20 linguagens CTS-Compliant.

Um conjunto único pode conter vários módulos escritos em linguagens .NET


diferentes, e os tipos podem se referenciar como se eles fossem escritos na mesma
linguagem.
Além dos serviços de tempo de execução, o .NET Framework também inclui uma
biblioteca abrangente com mais de 4.000 classes organizadas em namespaces que
fornecem uma variedade de funcionalidades úteis para tudo desde entrada e saída
de arquivo até manipulação de seqüência para análise XML e controles de Windows
Forms.

Uma aplicação C# típica usa amplamente a biblioteca de classe do .NET Framework


para manipular tarefas comuns de "conexões internas".

O que há de novo no Visual C# 2005

O Microsoft Visual C# 2005 inclui diversos novos recursos

A seguir um resumo das principais novidades, no nível de programação.

Editor de códigos

O Editor de códigos contém os seguintes recursos novos para Visual C# 2005, entre
eles os trechos de código

Trechos de códigos aumentam a velocidade de entrada de códigos de construção


comuns fornecendo um modelo que pode ser preenchido.

Trechos são armazenados como arquivos XML que podem ser facilmente editados e
personalizados.

Refatoração

Ferramentas de refactoração podem automaticamente reestruturar seu código


fonte, por exemplo, promovendo as variáveis locais para parâmetros ou
convertendo um bloco de código em um método.

Ambiente de Desenvolvimento
O ambiente de desenvolvimento inclui os seguintes aperfeiçoamentos para Visual
C# 2005, entre eles o IntelliSense

O IntelliSense foi aprimorado com os novos recursos a seguir:

• A lista de conclusão aparece automaticamente quando você volta com o


cursor para um operador de escopo que precede um objeto, ou quando você
desfaz a ação de conclusão.
• Quando você escreve código de tratamento de erros, uma lista ajuda a
descobrir qual exceção usar filtrando membros irrelevantes da lista de
conclusão em uma cláusula catch.
• Quando você precisa inserir código padronizado, o Automatic Code
Generation agora permite que você determine que o IntelliSense insira o
código para você.
• IntelliSense está disponível ao criar aplicativos da Web.

Comentários XML

Comentário XML é a forma de adicionar uma documentação consistente ao seu


código

Debug

Foi adicionado diversas ferramentas para debug, entre elas o assistente de


exceção, dicas , visualizador de variáveis em XML
Obtendo o Editor Visual Studio 2005 Express

O Visual Studio 2005 Express Edition consiste em ferramentas de desenvolvimento


leve, fácil de usar e simples de aprender para alunos, entusiastas e aqueles que as
utilizam por hobby.

Alem dos motivos acima, podemos utiliza-la sem nenhum custo.

Para obter Visual Studio 2005 Express Edition clique no link abaixo

http://msdn2.microsoft.com/pt-br/express/aa975050.aspx
Escolhendo a versão Express

Nesta mesma página, um pouco mais abaixo você encontrará diversas opções para
download.
Seleção do Idioma e Versão

Selecione o idioma Inglês, na opção Visual C# 2005

Salve o arquivo em disco.


e na seqüência clique no botão Executar.

Instalando o Visual Studio 2005 Express

Ao clicar no botão Executar, a instalação se iniciará.

1- Tela de Apresentação
Clique no botão Next para continuar.

Tela de licença

Você terá de aceitar os termos da licença.

Clique no botão Next para continuar.

Instalação do MSDN

Selecione esta opção se quiser fazer o download da documentação.

Observe o tamanho antes de fazer este download.


Observação
A documentação é opcional.

Clique no botão Next para continuar.

Local de Instalação

Selecione o local de instalação


Clique em Install

Instalação em Andamento

Instalação em progresso

Aguarde até o fim da instalação


Término da Instalação

Ao completar a instalação, sugerimos que já faça o registro do produto, que é


gratuito.

Observação

Após 30 dias, se você não tiver feito o registro, o programa para de funcionar.
Criando Seu Primeiro Aplicativo C#

Execute o Visual Studio


Criando um novo Projeto

Vamos criar um primeiro aplicativo C#.

Siga estas etapas para criar um programa que abre uma janela e reage a um
pressionamento de botão.

Procedimentos

1 -No menu File clique em New Project


Selecionando o Tipo de Projeto

Verifique se o modelo Windows Application está selecionado, no campo Name,


digite MeuProjeto , e clique em OK.

Tela inicial de nosso projeto

Você verá um Windows Form (Form1) no designer de Windows Forms.


Essa é a interface de usuário para seu aplicativo.

Adicionando Controles ao Formulário

No menu View, clique em Toolbox para tornar a lista de controles visível.


dicionando Controles ao Formulário

Expanda a lista Common Controls, e arraste o controle Label (rótulo) para seu
formulário.

Também da lista Common Controls, arraste um controle Button (botão) para o


formulário, próximo ao Label.
dicionando Código ao Botão

Clique duas vezes no novo botão (button1)para abrir o Editor de Código.

Observe que o editor inseriu um método chamado button1_Click que é executado


quando o botão for clicado.
Altere o método para ter esta aparência

Executando o Programa

Pressione CTRL + F5 para compilar e executar o aplicativo.


Quando você clicar no botão, é exibida uma mensagem de texto.

Parabéns!
Você acabou de escrever seu primeiro aplicativo C#.

Avaliação da aula

Envie toda a pasta (zipada) MeuProjeto para o email de seu tutor responsável.

O mesmo após a análise, se estiver tudo OK vai liberar a próxima aula.

Observação

Para localizar esta pasta, basta selecionar o nome do projeto dentro do Solution
Explorer.

Na janela de Propriedades será mostrada a pasta (Project Folder)


O prazo máximo para a liberação da próxima aula é de até 2 dias uteis.

Objetivo desta Aula

• Utilizar os recursos básicos do Visual Studio


• Alterar as propriedades de alguns controles
• Excluir e incluir eventos

Tópicos Abordados

• Usando o IDE do Visual C#


• Principais Janelas Criando um Projeto (Visual C#)
• Projetando uma interface de usuário (Visual C#)
• Tratamento de eventos
• Editando código Atalhos de Teclado Visual C#

Didática de Estudo

Para cada tópico


• Ler atentamente o texto
• Refazer cada exemplo apresentado

Avaliação da Aula

Será solicitado o envio do projeto criado.

• Este projeto deve ser enviado, via e-mail, ao tutor, o qual analisará o mesmo
• Se aprovado, o tutor libera a próxima aula, caso contrário, ele vai orientar,
como deveria ser feito.

Introdução a IDE (Visual C#)

O ambiente de desenvolvimento integrado (IDE) do Visual C# é uma coleção de


ferramentas de desenvolvimento expostas por meio de uma interface de usuário comum.

Algumas das ferramentas são compartilhados com outras linguagens do Visual Studio, e
algumas, como o compilador C#, são exclusivas para Visual C#.

Nesta aula você terá uma visão geral de como usar as ferramentas mais importantes do
Visual C# enquanto você trabalha na IDE em várias fases do processo de
desenvolvimento.

Ferramentas Visual C#

Na figura abaixo estão as janelas mais importantes no Visual C#.


Como abrir as janelas

As janelas para a maioria dessas ferramentas podem ser abertas a partir do menu
View.

Principais Janelas
Abaixo as Janelas que serão utilizadas com maior freqüência ao longo deste curso.

Solution Explorer

Utilize o Solution Explorer (Gerenciador de Soluções) para exibir e gerenciar


arquivos de projeto e configurações.

Toolbox

Utilize a Toolbox (Caixa de Ferramentas) para o desenvolvimento rápido de


interfaces gráficas usando o mouse para desenhar os vários objetos de um
formulário.

Properties
Utilize a janela Properties (Janela de Propriedades), para configurar propriedades e
eventos dos objetos da sua interface de usuário.

Criando um Projeto (Visual C#)

Um projeto contém todos os arquivos necessários para seu aplicativo, incluindo não
apenas arquivos de código fonte, mas também arquivos de recursos como ícones,
referências a arquivos externos que seu programa depende.

Quando você cria um projeto, Visual C# chama o compilador C# e outras


ferramentas internas para criar um conjunto executável usando os arquivos em seu
projeto.

O que há em seu projeto?

Observe a janela do Solution Explorer


Janela de Propriedades

O nó Properties representa definições de configuração que se aplicam a seu


projeto inteiro e são armazenados no arquivo .csproj na sua pasta solução.

Essas configurações incluem opções de compilação, segurança, configurações de


implantação e muito mais.

Designer de Projeto

Você faz modificações em seu projeto usando o Designer de Projeto, que é um


conjunto de Páginas de Propriedades que você acessa clicando com o botão
direito do mouse em Properties, e selecionando Open.
Detalhes do Designer de Projeto

Assembly name
Especifica o nome do arquivo de saída que manterá o manifesto do conjunto.

Default namespace
Especifica o espaço para nome base para todos os arquivos no projeto.

Output type
Especifica o tipo do aplicativo para criar.

Assembly Information
Através desta caixa de diálogo é utilizada para especificar os valores dos atributos
no arquivo AssemblyInfo criado automaticamente com o projeto.
A seguir será apresentado maiores detalhes.

Startup object
Define o ponto de entrada a ser chamado quando o aplicativo carregado;
geralmente isso é definido um para o formulário principal no seu aplicativo ou para
o Sub Main procedimento que deve executado quando o aplicativo for iniciado.

Recursos
As opções a seguir permitem-lhe definir configurações gerais para o aplicativo.

Icon
Define o arquivo.icone que você deseja usar como o ícone do aplicativo.
Resource File
Para adicionar um arquivo de recurso do Win32 para o projeto
Assembly Information

Através desta caixa de diálogo podemos especificar os valores dos atributos no


arquivo AssemblyInfo (.exe ou .dll ) criado automaticamente com o projeto.

Detalhes do Assembly Information

Title
Especifica um título para o manifesto do conjunto.

Description
Especifica uma descrição opcional para o manifesto do conjunto.

Company
Especifica um nome da empresa para o manifesto do conjunto.

Product
Especifica um nome de produto para o manifesto do conjunto.

Copyright
Especifica um aviso de copyright para o manifesto do conjunto.

Trademark
Especifica uma marca para o manifesto do conjunto.

Assembly Version
Especifica a versão do conjunto

File Version
Especifica um número de versão que instrui o compilador para usar uma versão
específica para o recurso de versão de arquivo Win32.

GUID
Um GUID exclusivo que identifica o conjunto. Quando você criar um projeto, Visual
Studio gera uma GUID para o conjunto.

Neutral Language
Especifica qual cultura o oferece suporte do conjunto.

Make assembly COM-Visible


Especifica se tipos no conjunto será acessíveis para COM.

Estas informações ficam gravadas junto ao seu arquivo executável.


Visualizando as informações gravadas

Para visualizar estas informações localize o teu arquivo executável e clique com o
botão direito do mouse.

Selecione a opção Propriedades


Referências

No contexto de um projeto, uma referência simplesmente identifica um arquivo


binário que seu aplicativo requer para executar.

Normalmente, uma referência identifica um arquivo DLL como um dos arquivos de


biblioteca de classe do .NET Framework.

Se seu programa cria uma instância de uma classe que está definida em algum
outro assembly, você deve adicionar uma referência a esse arquivo em seu projeto
antes de você compilar o projeto.
Para adicionar uma referência, clique em Add Reference no menu Project.

Todos os projetos C# por padrão incluem uma referência a mscorlib.dll, que contém
as classes principais do .NET Framework.

Observação
Você pode adicionar referências a DLLs adicionais do .NET Framework e outros
arquivos, clicando no menu Project, e selecionando Add Reference.

Formulários

Quando você cria um projeto Windows Forms, o Visual C# adiciona um formulário no


projeto por padrão e chama-o Form1.

Os dois arquivos que representam o formulário são chamados Form1.cs e


Form1.designer.cs.

Você escreve seu código no Form1.cs; o arquivo designer.cs é onde o Windows Forms
Designer escreve o código que implementa todas as ações que você realizou arrastando
e soltando controles da Caixa de Ferramentas.

Você pode adicionar um novo formulário, clicando no item de menu Project, e


selecionando Add Windows Form.

Cada formulário tem dois arquivos associados a ele. Form1.cs, ou qualquer outro nome
que você dê, contém o código fonte que você escreveu para configurar o formulário e
seus controles, como caixas de listagem e caixas de texto, e responde a eventos como
clique de botão e pressionamento de tecla.

Em projetos simples do Windows Forms, você faz a maioria ou toda a sua codificação
nesse arquivo.

O arquivo Designer.cs contém o código fonte que o Forms Designer escreve quando
você arrasta controles para o formulário, define propriedades na janela Properties, e
assim por diante.
Normalmente, você não deve editar esse arquivo manualmente.
Outros arquivos de código fonte

Um projeto pode incluir qualquer número de arquivos .cs adicionais que pode ou
não estar associado a um Windows Form específico.

Na ilustração anterior do Gerenciador de Soluções, program.cs contém o ponto de


entrada para o aplicativo.

Um único arquivo .cs pode conter qualquer número de definições de classe e


estrutura.

Você pode adicionar arquivos novos ou existentes ou classes no seu projeto,


clicando em Add New Item ou Add Existing Item no menu Project.

Projetando uma interface de usuário

No Visual C#, a maneira mais rápida e conveniente de criar sua interface de usuário
(UI) é fazê-la visualmente, usando o Windows Forms Designer e o Toolbox.

Há três etapas básicas para criar todas as interfaces de usuário: ·

• Adicionar controles ao formulário


• Definir propriedades iniciais para os controles
• Escrever manipuladores para eventos específicos (codificação)

Adicionando controles

No designer, você usa o mouse para arrastar, por exemplo botões e caixas de texto, para
uma superfície de projeto que representa o formulário.

Vamos utilizar nosso formulário criado na aula anterior.


A figura a seguir mostra uma caixa de combinação que foi arrastado da janela Toolbox
para um formulário no Windows Forms Designer.

Enquanto você trabalha visualmente, o designer converte suas ações em código fonte
C# e os grava em um arquivo de projeto chamado designer.cs onde é o nome que você
deu para o formulário.

Quando seu aplicativo é executado, esse código fonte irá posicionar e dimensionar os
elementos de UI para que elas apareçam da mesma maneira que na superfície de
projeto.

Definindo Propriedades

Após você adicionar um controle ao seu formulário, você pode usar a janela
Properties para definir suas propriedades, como cor do plano de fundo e texto
padrão.

Os valores que você especificar na janela Properties são simplesmente os valores


iniciais que serão atribuídos a essa propriedade quando o controle é criado em
tempo de execução.

Em muitos casos, esses valores podem ser acessados ou alterados


programaticamente em tempo de execução simplesmente obtendo ou definindo a
propriedade na instância da classe de controle em seu aplicativo.

No seu formulário, selecione o botão e observe a caixa de propriedades.


Use essa janela para exibir e alterar as propriedades em tempo de design e eventos
dos objetos selecionados que estão localizados em editores e designers.

Detalhes da Janela de Propriedades

Nome do objeto
Lista o objeto atualmente selecionado ou objetos.

Quando você seleciona vários objetos, somente propriedades comuns a todos os


objetos selecionados aparecem.

Categorias
Lista todas as propriedades e valores de propriedade para o objeto selecionado, por
categoria.

Você pode recolher uma categoria para reduzir o número de propriedades visíveis.

Ao você expandir ou recolher uma categoria, você verá um sinal (+). ou menos (-)
para a esquerda do nome da categoria Categorias estão listadas em ordem
alfabética.

Alfabética
Em ordem alfabética classifica todas as propriedades em tempo de design e
eventos para objetos selecionados.
Propriedades
Exibe as propriedades de um objeto.

Muitos objetos também ter eventos que podem ser exibidos usando a Properties
janela.

Eventos
Exibe os eventos para um objeto.

Propriedade Pages
Exibe a Property Pages caixa de diálogo ou Project Designer para o item
selecionado.

Páginas de propriedades exibe um subconjunto das propriedades disponíveis na


janela Properties. Use este botão para exibir e editar propriedades relacionadas a
configuração ativa do seu projeto.

Configurando as propriedades de nosso formulário

Basicamente vamos configurar as propriedades Name e Text dos vários controles


e do formulário.

Altere a as propriedades como a seguir:

Form1
Name : frmCadastro
Text: Cadastro

Botão
Name : cmdIncluir
Text: Incluir

label1
Name : lblEmpresa
Text: Empresa

textBox1
Name : txtEmpresa
Text: deixar em branco

Label2
Name : lblStatus
Text: Status:

Tratamento de eventos

Programas com interfaces de usuário gráficas são principalmente direcionadas a


eventos.

Elas aguardam até que um usuário faça algo como inserir texto em uma caixa de
texto, clicar em um botão, ou alterar uma seleção em uma caixa de listagem.

Quando isso acontece, o controle, que é apenas uma instância de uma classe do
.NET Framework, envia um evento para seu aplicativo.

Você pode optar por manipular um evento escrevendo um método especial em seu
aplicativo que será chamado quando o evento é recebido.

Você pode usar a janela Properties para especificar que evento deseja tratar em
seu código.

Selecione botão no designer e clique no botão Events, com o ícone de um raio, na


barra de ferramentas da janela Properties para ver os seus eventos.
Observe que apesar de você ter alterado o nome do botão, ele continua associado
ao button1_Click

Basta, nesta janela apagar este nome e dar um clique duplo no lugar onde estava o
button1_Click conforme figura abaixo.

Código Fonte

Quando você adiciona um manipulador de eventos através da janela Properties, o


designer automaticamente escreverá para você o corpo do método como vazio, e
fica por sua conta escrever o código para que o método faça algo útil.

Observe no editor de código que o procedimento anterior continua lá.


Se quizer pode apaga-lo.

A maioria dos controles geram um número grande de eventos, mas na maioria dos
casos, um aplicativo somente precisará manipular alguns deles, ou mesmo somente
um.

Por exemplo, você provavelmente precisa manipular um evento de Click de botão,


mas não é necessário manipular seu evento Paint a menos que você deseje
personalizar a aparência de alguma maneira avançada.

Editando código

O Editor de códigos do Visual C# é um processador de texto para escrever código


fonte.

Recursos do Editor de Código

Assim como o Microsoft Word fornece suporte abrangente para frases, parágrafos, e
gramática, o editor de códigos C# faz o mesmo para sintaxe C# e para o .NET
Framework.

Por exemplo o IntelliSense, baseado na documentação continuamente atualizada sobre


as classes .NET Framework e os métodos básicos à medida que você digita no editor, e
a geração de código automática.
Sublinhado Ondulado

Notificações visuais de palavras incorretas, erro de sintaxe e situações de aviso


conforme você digita.

Finalizando nosso exercício

Vamos adicionar ao nosso procedimento a seguinte instrução:


Ao executar o programa (CTRL + F5)

Digite um nome na caixa de texto e clique no botão incluir

Atalhos de Teclado Visual C#

Visual C# fornece um número enorme de atalhos de teclado que você pode usar para
executar ações sem usar o mouse ou menus.

Visite o link abaixo para ter uma lista completa, agrupada por categorias.

http://msdn2.microsoft.com/en-us/library/ms366739(VS.80).aspx
Avaliação da aula

Envie toda a pasta (zipada) MeuProjeto, com as alterações feitas nesta aula para o seu
tutor responsável.
O mesmo após a análise, se estiver tudo OK vai liberar a próxima aula.

Observação
O prazo máximo para a liberação da próxima aula é de até 2 dias uteis.

Criando uma Aplicação Console


Introdução

Uma aplicação console é uma aplicação que roda através de uma linha de
comando, no prompt do DOS

Para criar um novo projeto.

1- Selecione no menu File a opção New Project


Selecione o template Console Application.

Altere o nome do projeto (name) para por exemplo ConsoleApplication1

Clique em OK

Tela inicial de nosso projeto

A sua tela inicial deverá se parecer com esta.


Adicionando código

Adicione o seguinte código dentro do método Main

Abaixo o código completo

Para executar clique CTRL + F5


Detalhes do Programa C#

O seguinte programa Console simplesmente exibe C# no console.

Vamos agora examinar as partes importantes deste programa por sua vez.
No início do código temos algumas referencias a namespaces (será abordado mais a
frente)

Comentários

A linha abaixo é um comentário:

Os caracteres // convertem o restante da linha em um comentário.

Você também pode comentar um bloco de texto, colocando-o entre os caracteres /*


e */, por exemplo:
O método main()

Um programa console em C# deve conter um método chamado Main, no qual o


controle de execução inicia e termina.

O método Main é onde você cria objetos e executa outros métodos.

O método Main é um método static (estático) que reside em uma classe ou uma
estrutura.

No exemplo anterior, ele reside em uma classe chamada Program.

Entrada e Saída

Programas console em C# geralmente usam os serviços de entrada / saída


fornecidos pelas Bibliotecas do .NET Framework

A instrução:

Console.WriteLine(curso);

usa o método WriteLine, um dos métodos de saída da classe Console.

Ele exibe no console o valor do seu parâmetro seguido por uma nova linha.

Criando uma Aplicação Windows

Uma aplicação console é uma aplicação que roda através de uma linha de
comando, no prompt do DOS

Atualmente este tipo de aplicação é muito pouco utilizado.


Normalmente se utiliza aplicações Windows ou Web.

Vamos fazer uma pequena revisão de como criar uma aplicação Windows

Para criar um novo projeto.

1- Selecione no menu File a opção New Project


Selecione o template Windows Application.

Altere o nome do projeto (name) para por exemplo WindowsApplication1

Clique em OK

Tela inicial

Tela inicial de nosso projeto.


Adicione ao Formulário (Form1) um botão (Button) e um Label

Adicionando Controles

Para adicionar os controles acima basta com o mouse sobre a caixa de ferramentas
e arrastar os controles para o formulário.

Teu formulário deve ficar com a aparência semelhante a da figura acima.

Atribuíndo código ao botão

De um duplo clique no seu botão e a janela de código irá aparecer.


Observe que foi criado um procedimento de evento chamado button1_Click

Mais à frente veremos maiores detalhes sobre este procedimento.

Por enquanto podemos observar que ele foi declarado na linha 18 e o seu corpo
começa na linha 19 e termina na linha 21.

Este procedimento é privado (private), é do tipo void (ou seja não retorna nada), se
chama button1_Click e recebe como parâmetros a variável sender que é do tipo
Object e a variável e que é do tipo EventArgs.

Adicionando instruções

Adicione o seguinte código dentro do método

Para executar clique CTRL + F5


Clique no botão

Observe que foi atribuído ao botão o texto C#

Instruções, expressões, e operadores

Abaixo veremos alguns elementos fundamentais que compõem um programa C#.

O código C# de um aplicativo consiste de instruções abrangendo palavras-chave C#,


expressões e operadores.

No C# uma instrução deve necessariamente ser criada dentro de um método, já uma


declaração de variável, pode ser feita dentro da classe.
Observe que no código acima a declaração da variável status foi feita dentro do bloco da
classe.

Instruções

Uma instrução pode declarar variável ou constante, uma chamada local um método,
criar um objeto, ou atribuir um valor a uma variável, propriedade ou campo.

Observe abaixo as linhas 20 e 21 Na linha 20 estamos declarando uma variável chamada


curso, que é do tipo string e na mesma linha estamos atribuindo um valor inicial ("C#")

Uma série de instruções delimitadas por chaves forma um bloco de código.

O corpo de método é um exemplo de um bloco de código.

Na figura acima temos um bloco começando na linha 19 até a linha 22

Visibilidade da variável

Variáveis ou constantes declaradas em um bloco de código só estarão disponíveis para


instruções dentro do mesmo bloco de código.

Por exemplo, o código a seguir mostra um erro na linha 21.


A variável status foi declarada dentro do bloco do método Incluir(), portanto ela não
existe fora deste bloco.

Expressões

Uma expressão é um fragmento do código que pode ser avaliado como um único valor,
objeto, método, ou espaço para nome.

Expressões podem conter um valor literal, uma invocação do método, um operador e


operandos, ou um nome simples.

Nomes simples pode ser, por exemplo o nome de uma variável, parâmetro, método,
espaço para nome ou tipo.

Exemplo

Expressões podem usar operadores que por sua vez usam outras expressões como
parâmetros ou chamadas de método cujos parâmetros são por sua vez outras chamadas
de método, portanto, expressões podem variar de simples a muito complexo.

Os tipos mais simples de expressões são literais e nomes simples.

Um literal é um valor constante que não tem nome.


No exemplo anterior 10 e Wincomp são literais

Especificamente, chamar um método é uma expressão de chamada método.

Uma invocação (chamada) do método requer o nome do método, como um nome como
no exemplo anterior, na linha 20.

Operadores

O C# fornece um grande conjunto de operadores, que são símbolos que especificam as


operações para executar em uma expressão.

Em C#, um operador é um termo ou um símbolo que usa uma ou mais expressões,


chamados operandos, como entrada e retorna um valor.

Operadores que usam um operando, como o operador do incremento ou new, são


chamados operadores unários (++) .

Operadores que usam dois operandos, tais como operadores aritméticos (+., -) são
chamados operadores binários.

Um operador, o operador condicional., utiliza três operandos e é o único operador


terciário em C# (?:)

Principais operadores
A instrução C# a seguir contém dois operadores binários, cada um com dois operandos.

O operador de atribuição, =,. tem o inteiro y, e a expressão 2 + 3 como operandos

A expressão 2 + 3 próprio contém o operador de adição, e usa valores 2 Inteiros e 3


como operandos: Y = 2 + 3;

Ao longo do curso veremos mais exemplos de uso de operadores.

Como adicionar mais formulários ao projeto

1- Adicione um novo formulário ao seu projeto.

Basta sobre o nome do projeto clicar com o botão direito do mouse e selecionar Add - >
Windows Form
Selecionando o Template

2 -Selecione o Template para Windows Form e altere o name para Calculadora.

Para alterar o formulário inicial

No Solution Explorer abra o arquivo Program.cs


Dento do método Main altere a seguinte instrução

Application.Run(new Calculadora());

Avaliação da aula

Criar o formulário, conforme figura abaixo e adicionar as instruções para as 4


operações matemáticas básica
Dica A propriedade Text da caixa de texto é do tipo string.

Para efetuar operações matemáticas é necessário fazer a conversão

Exemplo

Envio dos exercícios

Envie toda a pasta (zipada) de seu projeto, com as alterações feitas nesta aula
para o seu tutor responsável.

O mesmo após a análise, se estiver tudo OK vai liberar a próxima aula.

Observação
O prazo máximo para a liberação da próxima aula é de até 2 dias uteis.

Introdução aos Tipos de Dados

C# é uma linguagem fortemente tipada, portanto cada variável e objeto deve ter um tipo
declarado.

• Pode ser um tipo como por exemplo um char ou um int


• Ou um tipo definido pelo usuário como uma interface ou uma classe

Tipos de dados também podem ser definidos como sendo um:

• Tipos valor que armazenam valores


• Tipos de referência que armazenam referências para os dados reais.
Tipos Inteiros

A tabela a seguir mostra os tamanhos e intervalos dos tipos inteiros

Tipos Ponto Flutuante

A tabela a seguir mostra a precisão e o intervalo aproximado para os tipos de ponto


flutuante.

Todos os tipos acima , na linguagem C# são aliases dos tipos sistema .NET
Framework.

Por exemplo, int é um alias de System.Int32

Equivalência entre C# e o Framework

A tabela a seguir mostra palavras-chave para os tipos do C# que são aliases dos
tipos predefinidos no namespace System.
Todos os tipos na tabela, exceto object e string, são chamados de tipos simples.

As palavras-chaves, quanto ao tipo e seus aliases são intercambiáveis.

Por exemplo, você pode declarar uma variável inteira usando um das seguintes
declarações:

Inicializando as variáveis

Variáveis locais em C# devem ser inicializadas antes de serem usadas.

Portanto, se você declarar uma variável local sem inicialização como abaixo:

Você não pode usá-la antes você inicializá-la.

Caso tente usar dará um erro conforme linha abaixo

Use of unassigned local variable 'x'


Você pode inicializá-la usando a instrução a seguir:

Neste caso estará sendo chamado o construtor padrão da classe Int32 que atribui
um valor inicial para a variável.

Observação

Construtor será abordado em detalhes mais a frente.

Por enquanto considere que o construtor é um método que é executado


automaticamente quando se carrega uma instancia da classe para a memória.

Usando o operador new, chama o construtor padrão do tipo específico e atribui o


valor padrão para a variável.

No exemplo anterior, o construtor padrão atribuí o valor 0 para x que é equivalente


a:

Tabela de valores padrão

A tabela a seguir mostra os valores padrão dos tipos valor retornado pelos
construtores padrão.

O construtores padrão é chamado usando o operador new da seguinte maneira:

A instrução anterior possui o mesmo efeito que a instrução a seguir:

Esta é a forma mais utilizada.

Lembre-se usando variáveis não inicializados em C# que não é permitido.


Tipo bool

A palavra-chave bool é um alias do System.Boolean.

Ele é usado para declarar variáveis que armazenam os valores booleanos, ou seja
true ou false.

Você também pode atribuir uma expressão avaliada como booleana a uma variável
bool.

Observações

Em C++, um valor do tipo bool pode ser convertido em um valor do tipo int, em
outras palavras, false é equivalente a zero e true é equivalente a valores diferentes
de zero.

Em C#, não existe conversão entre o tipo bool e outros tipos.


Tipo Byte

A palavra-chave byte denota um tipo que armazena valores inteiros conforme indicado
na tabela a seguir.

Você pode declarar e inicializar uma variável byte como neste exemplo:

Se o inteiro literal ultrapassa o intervalo de byte, ocorrerá um erro de compilação.

Tipo char

A palavra-chave char é usada para declarar um caractere Unicode

Constantes do tipo char podem ser gravadas como caracteres literais, seqüência de
escape hexadecimal, ou representação Unicode.

Você também pode converter os códigos para caracteres.

Veja exemplos abaixo

Tipo decimal

A palavra-chave decimal denota um tipo de dados de 128 bits.

Em comparação com o tipo ponto flutuante, o tipo decimal tem uma precisão maior e
um intervalo menor, que torna adequado para cálculos financeiros e monetários.
O intervalo aproximado e a precisão do tipo decimal são exibidos na tabela a seguir.

Se você deseja um literal numérico real deve tratar como decimal, usando o sufixo m ou
M, por exemplo:

Sem o sufixo m, o número é tratado como double (que é o padrão) gerando portanto um
erro do compilador.

Os tipos integrais são implicitamente convertidos para decimal e o resultado é retornado


como decimal. Portanto, você pode inicializar uma variável decimal usando um literal
Inteiro, sem o sufixo, da seguinte maneira:

Não existe nenhuma conversão implícita entre tipos de ponto flutuante e o tipo decimal;
portanto, um cast deve ser usado para converter entre esses dois tipos.

Tipo double

Palavra-chave double denota um tipo simples que armazena valores de ponto flutuante
de 64 bits.

A tabela a seguir mostra o precisão e aproximado intervalo para o double tipo.

Por padrão, um literal numérico real no lado direito do operador de atribuição é tratada
como double.

Tipo enum
Palavra-chave enum é usada para declarar uma enumeração, um tipo distinto consiste
um conjunto de constantes nomeadas chamada a lista de enumerador.

Cada tipo de enumeração tem um tipo base, que pode ser qualquer tipo integral exceto
char.

O tipo base padrão dos elementos de enumeração é int.

Exemplo

Por padrão, o primeiro enumerador tem o valor 0, e o valor da cada enumerador


sucessiva é aumentado em 1.

Por exemplo:

Nessa enumeração, Domingo é 0, Segunda é 1 e assim por diante.

Enumeradores podem ter inicializadores para substituir os valores padrão.

Por exemplo:

Nessa enumeração, a seqüência de elementos é forçada para iniciar a partir 1 ao invés


do 0.
Agora Nessa enumeração, Domingo é 1, Segunda é 2 e assim por diante.

Tipo float

Palavra-chave float denota um tipo simples que armazena valores de ponto flutuante de
32 bits.
A tabela a seguir mostra o precisão e aproximado intervalo para o tipo float .

Por padrão, um literal numérico real no lado direito do operador de atribuição é tratada
como double

Portanto, para inicializar uma variável FLOAT, use o sufixo f ou F, como por exemplo:

Se você não usar o sufixo na declaração anterior, você receberá um erro de compilação
porque você está tentando armazenar um double em uma variável tipo float.

Tipo int

Palavra-chave int denota um tipo inteiro que armazena valores de acordo com o
tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma variável do tipo int como este exemplo:

Tipo long

Palavra-chave long denota um tipo integral que armazena valores de acordo com o
tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma long variável como este exemplo:
Tipo sbyte

Palavra-chave sbyte denota um tipo inteiro que armazena valores de acordo com o
tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma sbyte variável como este exemplo:

Se o Inteiro literal excede o intervalo de sbyte, ocorrerá um erro de compilação.

Tipo short

Palavra-chave short denota um tipo inteiro de dados que armazena valores de


acordo com o tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma short variável como este exemplo:

Se o Inteiro literal não cabe em um short local de armazenamento, ocorrerá um erro


de compilação.

Tipo uint

Palavra-chave uint denota um tipo inteiro que armazena valores de acordo com o
tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma variável do tipo uint como este exemplo:

Tipo ulong
A palavra-chave ulong denota um tipo inteiro que armazena valores de acordo com
o tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma ulong variável como este exemplo:

Tipo ushort

A palavra-chave ushort denota um tipo inteiro de dados que armazena valores de


acordo com o tamanho e intervalo mostrado na tabela a seguir.

Você pode declarar e inicializar uma ushort variável como este exemplo:

Tipos por referência

Variáveis de tipos por referência (tambem chamado de objetos) armazenam


referências para os dados reais.

Esta seção apresenta apenas as palavras-chave usada para declarar tipos de


referência

Fazem parte deste grupo os seguintes tipos

• Classe
• Interface
• Delegates
• Object
• String

Estes tipos serão vistos em detalhes mais a frente, ao longo do curso.

Formatação numérica

Você pode formatar resultados numéricos, usando o método String.Format.


A tabela a seguir contém as seqüências com suporte formato padrão.

Boxing e Unboxing

Boxing e unboxing permitem que tipos por valor passem a serem tratados como
objetos.

Isso permite que o tipo de valor para ser armazenado na pilha coletados pelo
Garbage Collector.

Unboxing extrai o tipo de valor do objeto.

Neste exemplo, a variável i Inteiro é "Boxed" e atribuído ao objeto o.

O objeto o pode, então, ser "unboxed" e atribuído à variável i Inteiro:

Introdução as Matrizes
Uma matriz é uma estrutura de dados que contém um número de variáveis do
mesmo tipo.

Matrizes são declaradas com um tipo de dados:

Tambem é necessário definir o numero de elementos.

Neste caso definimos a matriz com 3 elementos.

Essa matriz contém os elementos da i[0] à i[2].

Obviamente poderiamos fazer estes 2 passos em uma única instrução:

Atribuindo valores para a matriz

Observe que o primeiro elemento é base zero.

Para obter o valor de algum elemento

Forma simplificada.
Tambem podemos declarar a matriz e inicializar seus valores em uma única linha

Matrizes como objetos

No C#, matrizes são objetos, e não apenas regiões endereçáveis de memória


contígua como em C e C++.

Você pode usar as propriedades, e outros membros da classe.

Um exemplo disso deve estar usando a propriedade length para obter o


comprimento de uma matriz.

A classe System.Array fornece vários outros métodos e propriedades para


classificação, pesquisa, e copia de matrizes. Exemplo
Neste caso estamos obtendo a posição do valor 20 dentro do array a.

O resultado será 3.
Caso não encontrasse o valor seria -1

Matrizes multidimensionais

Matrizes podem ter mais de uma dimensão.

Por exemplo, a declaração a seguir cria uma matriz bidimensional de quatro linhas
e duas colunas:

Você pode inicializar a matriz na declaração conforme mostrado no exemplo o


seguir:

Matrizes irregulares

Uma matriz irregular é uma matriz cujos elementos são matrizes.

Os elementos de uma matriz irregular podem ser de dimensões diferentes e


tamanhos.
Uma matriz irregular às vezes é chamado uma " matriz de matrizes".

Os exemplos a seguir mostram como declarar, inicializar, e acessar matrizes


irregulares.

A seguir há uma declaração de uma matriz dimensional única que tenha três
elementos, cada um deles é uma matriz dimensional única de inteiros:

Antes de usar x, seus elementos devem ser inicializados.


Você pode inicializar os elementos desta forma:
Cada um dos elementos é uma matriz dimensional única de inteiros.
O primeiro elemento é uma matriz de inteiros 5, o segundo é uma matriz de
inteiros, 4 e o terceiro é uma matriz de inteiros 2.

Também é possível usar inicializadores para preencher os elementos da matriz com


valores, caso em que você não precisa o tamanho de matriz. Por exemplo:

Você também pode inicializar a matriz na declaração da forma abaixo:

Observações sobre matrizes

Uma matriz irregular é uma matriz de matrizes, e portanto seus elementos são tipos
de referência e são inicializados para null.

Você pode acessar elementos individuais da matriz como esses exemplos:

O método Length retorna o número de matrizes contidos na matriz irregular.

Por exemplo, supondo que você tenha declarado da matriz anterior, esta linha:

Retornará um valor de 3.

Para saber o tamanho de uma linha:

Retornará um valor de 5.

Exemplo Matriz de 2 dimensões

Este exemplo cria uma matriz cujos elementos são matrizes.

Cada um dos elementos de matriz tem um tamanho diferente.


Resultado

Usando foreach com matrizes

Esta instrução fornece uma maneira simples e limpa para percorrer os elementos
de uma matriz.

Por exemplo, o código a seguir cria uma matriz chamada n e intera através da
mesma a instrução foreach:

Introdução a Strings
Uma string (ou seqüência de caracteres) é uma matriz de caracteres.

Uma seqüência de caracteres literal é declarada usando aspas, como mostrado no


exemplo a seguir:

Você pode extrair substrings, e concatenar seqüências, como este:

No exemplo abaixo, estamos obtendo, a partir da posição zero, 3 caracteres.

O resultado será Win

Strings são imutáveis, significando que eles não podem ser alterados uma vez que
tenha sido criada.

Métodos que atuam em strings realmente retornam novas strings.

Trabalhando com strings

Caracteres de escape
Caracteres de escape, como " \\n " (nova linha) e " \\t " (tabulação) pode ser incluídas
em seqüências.

As instruções:

terão como resultados:

Se você desejar incluir uma barra dentro da string , ele deve ser precedido com outra
barra invertida.

A seqüência a seguir:
Resultado

ab\\cd

O símbolo @

O @ informa ao construtor da String para ignorar caracteres de escape e quebras de


linha.

As instruções:

terão como resultados:

Trabalhando com strings

Caracteres de escape
Caracteres de escape, como " \\n " (nova linha) e " \\t " (tabulação) pode ser
incluídas em seqüências.

As instruções:

terão como resultados:

Se você desejar incluir uma barra dentro da string , ele deve ser precedido com
outra barra invertida.

A seqüência a seguir:

Resultado

ab\\cd
O símbolo @

O @ informa ao construtor da String para ignorar caracteres de escape e quebras


de linha.

As instruções:

terão como resultados:

Usando StringBuilder

A classe StringBuilder cria um buffer de seqüência que oferece melhor


desempenho se seu programa executa uma grande quantidade de manipulação de
strings.

A seqüência StringBuilder também permite que você para reatribuir caracteres


individuais, algo que o tipo string não oferece suporte.

Esse código, por exemplo, altera o conteúdo de uma seqüência sem criar uma nova
seqüência:

Avaliação da aula

1 - Baseado no formulário da calculadora da aula anterior alterar o mesmo para


trabalhar com números reais e apresentar o resultado sempre formatado com 2
digitos após a virgula.

2 - Crie um novo formulário com a seguinte aparencia.


Ao clicar no botão verificar, se tiver @ é porque é válido e dar uma mensagem
adequada.

Apresentar o nome e o dominío a partir do email digitado.

Dica Utilize o método IndexOf da classe String para obter a posição do @ e


SubString para obter o que vem antes e depois do @.

3 - Crie um formulário, com apenas um botão (para listar ) e um label para


apresentar o resultado

Crie um arrary para armazenar as seguintes informações sobre o transito:

Para cada dia do mês e para cada hora, o transito, em kilometros na cidade.

Por exemplo:

Dia 05 às 12:00 -> transito: 20 km


Dia 05 às 23:00 -> transito: 40 km
Dia 10 às 10:00 -> transito: 45 km
Dia 22 às 19:00 -> transito: 70 km
Dia 31 às 02:00 -> transito: 10 km

Crie um array de 2 dimensões para armazenar as informações acima


Depois liste os valores incluídos

Dica:

Crie um array de 2 dimensões para inteiros e atribua os valores, conforme exemplo


abaixo.

transito[5][12] = 20;

Envio dos exercícios


Envie toda a pasta (zipada) de seu projeto, com as alterações feitas nesta aula
para o seu tutor responsável.

O mesmo após a análise, se estiver tudo OK vai liberar a próxima aula.

Observação
O prazo máximo para a liberação da próxima aula é de até 2 dias uteis.

Estruturas de Decisão e Repetição


Instruções para controle de fluxo

Uma instrução de controle de fluxo permite que o fluxo do programa seja desviado,
mediante certas condições.

Temos dois grupos

• Estruturas de Decisão
• Estruturas de Repetição

Quando o programa é executado, as varias instruções são executadas da esquerda


para a direita e de cima para baixo.

Instrução para controle de fluxo pode mediante certas condições, executar ou não
um bloco, ou executar o bloco repetidas vezes, ou seja alterar o fluxo normal da
execução.

Instrução if else

A instrução if seleciona um bloco ou instrução para execução com base no valor de


uma expressão booleana.

No exemplo a seguir, um boolean sinalizador flagCheck é definido como true e


verificado na instrução if.

Código Fonte
Simplificando o if

No exemplo anterior, como há apenas uma instrução no if, o bloco não é necessário
e poderíamos simplificar o exemplo.

Para executar mais de uma instrução dependendo do valor da expressão booleana,


basta incluir as instruções em um bloco usando {}, conforme o primeiro exemplo.

Utilizando ifs Aninhados

As instruções a serem executadas após testar a condição podem ser de qualquer


tipo, incluindo outra if Instrução aninhada na instrução if original.

Em instruções if aninhadas , a cláusula else pertence ao último if que não tenha um


correspondente else.

Por exemplo:
Neste exemplo, o status será verdadeiro se x for maior do que 10 e y tambem for
maior do que 10

Se x for maior do que 10 e y for menor ou igual a 10 o status será falso.

Se x for menor ou igual a 10, nada será atribuído ao status.

Exemplo ifs aninhados

No exemplo abaixo, você digita um caractere na caixa de texto e o programa


verifica se o caractere de entrada é um caractere alfabético.

Nesse caso, ele verifica, tambem se é minúsculo ou maiúsculo.

Em cada caso, a mensagem apropriada será exibida.

Código Fonte
Utilizando else if

Também é possível para estender a instrução if para manipular várias condições


usando a organização else-if a seguir:

Instrução switch

A instrução switch é uma instrução de controle que trata várias seleções, passando
controle a uma das instruções case no seu corpo como o exemplo a seguir:
Código Fonte

Observação

O controle é transferido para a instrução case que corresponde ao valor da opção.

A instrução switch pode incluir qualquer número de instâncias case.

Execução do corpo da instrução começa na instrução selecionada e continua até


que a instrução break transfira o controle fora do corpo do case.

A instrução break , é necessária após cada bloco case.

Se há uma expressão case corresponde ao valor Switch, então controle será


transferido para instrução (ões) o (s) que seguem o rótulo opcional default.

Se não houver nenhum default Rótulo, controle é transferido fora a switch.


Utilizando string com switch

Observe que você também pode usar a variável de seqüência de caracteres


diretamente.
Nesse caso, você pode usar os cases da seguinte forma:

Instruções para repetição

Você pode criar loops usando as seguintes instruções de repetição.

• for
• while
• do..while

Utilize instruções de repetição para executar uma instrução ou um bloco de


instruções um certo número de vezes, até que uma certa condição seja satisfeita.

Instrução while

A instrução while executa uma instrução ou um bloco de instruções colocados entre


{} repetidamente até que uma expressão especificada for avaliada como false.
Código Fonte

Instrução do while

A instrução do while executa uma instrução ou um bloco de instruções colocados


entre {} repetidamente até que uma expressão especificada for avaliada como
false.

Código Fonte
Instrução for

O for loop executa uma instrução ou um bloco de instruções repetidamente até que
uma expressão especificada for avaliada como false.

Código Fonte

A instrução for executa a instrução ou instruções repetidamente da seguinte


maneira:

Primeiro, o valor inicial da variável i é avaliado.

Então, enquanto o valor i é menor ou igual a 10 , a condição será avaliada como


true, e o bloco a seguir será executado e o valor de i é incrementado.

Quando a expressão se torna false o controle é transferido fora do loop.

Todas as expressões da instrução for são opcionais; por exemplo, a instrução a


seguir é usada para gravar um loop infinito:

codigo

Instrução foreach
A instrução foreach repete um grupo de instruções para cada elemento em uma
matriz ou uma coleção de objeto.

A instrução foreach é usada para uma iteração através da coleção para obter as
informações desejadas, mas não deve ser usado para alterar o conteúdo da coleção
para evitar resultados imprevisíveis.

Após a conclusão da iteração para todos os elementos na coleção, o controle é


transferido para a próxima instrução após o bloco do foreach.

Neste exemplo, foreach é usado para exibir o conteúdo de uma matriz de inteiros.

Código Fonte

Desvios no fluxo do programa

Um desvio é feito usando instruções próprias para desviar o fluxo do programa, que
causa uma transferência imediata do controle do programa

Principais palavras chaves

• break
• continue
• return

Instrução break

A instrução break termina o bloco mais próximo de uma instrução for ou while em
que apareça.
O controle é passado para a instrução após o bloco.

Neste exemplo, a instrução condicional contém um contador que está deve para
contar de 1 a 10, no entanto, a instrução break termina o loop depois do 4.

Código Fonte

Instrução continue

A instrução continue passará o controle para a próxima repetição, ou seja as


instruções seguintes, dentro do bloco não serão executadas.

Neste exemplo, um contador foi inicializado para contar de 1 a 10.

Por meio da instrução continue em conjunto com a expressão (i == 5), as


instruções entre continue e o final do corpo do for serão ignoradas.
Observe que no status não apresenta o número 5

Código Fonte

Instrução goto

A instrução goto transfere o controle de programa diretamente para uma instrução


rotulada.

O exemplo a seguir demonstra o uso do goto.


Instrução return

A instrução return termina a execução do método no qual ele aparece e retorna o


controle para o método de chamada.

Ele também pode retornar um valor opcional.

Se o método for um void tipo, a return instrução poderá ser omitida.

Código Fonte

No exemplo acima observe que nenhuma instrução após o return será executada.

Tratamento de Exceções
Exceções e Tratamento de Exceção

A linguagem C# fornece vários recursos para tratamento de exceção.

Tratamento de exceção é uma maneira de lidar com quaisquer situações


inesperadas ou excepcionais que surgirem enquanto um programa está sendo
executado, como por exemplo um problema de acesso à banco de dados, ou uma
impressora não localizada..

Tratamento de exceção usa as palavras-chaves try, catch., e finally para tentar


executar instruções que podem não ter êxito.

Exceções podem ser geradas pelo Common Language Runtime (CLR), pelas
bibliotecas de terceiros, ou via código usando a palavra-chave throw.

Exemplo de Exceção
No exemplo abaixo, estamos tentando dividir por zero.

Abaixo o erro, quando executado a partir do ambiente de desenvolvimento.

Tratando a exceção

Adicionando o bloco try..catch


Observe que as instruções que podem causar erros agora estão dentro do bloco do
try.

Caso alguma instrução de erro o fluxo do programa é imediatamente desviado para


o bloco do catch

Tente executar novamente

Classe Exception

A classe Exception contêm informações detalhadas sobre o erro, incluindo o estado


da pilha de chamadas e uma descrição do erro.
Veja o resultado abaixo utilizando a propriedade Message.

Propriedades da classe Exception

Classes Derivadas
A partir da classe Exception, existe uma série de classes, derivadas da mesma para
tratamento mais específico de uma exceção em particular.

Essas exceções e suas condições de erro são listadas abaixo.

Exemplo utilizando DivideByZeroException


Observação
Observe que se tentar dividir por zero entrará apenas no primeiro catch

Se o erro for qualquer outro entrara no segundo catch

Criando as nossa próprias exceções

Através da classe ApplicationException podemos criar uma exceção gerada pelo


usuário e não pelo Common Language Runtime.

Abaixo exemplo para criar validações através de exceções

Métodos para validação


Chamada aos métodos.

Executando o exemplo anterior

1 - Verificando nome em branco


2 - Verificando nota em branco

3 - Verificando nota fora do intervalo de 0 à 10

4 - Entrando com os dado corretos


Código fonte completo

Bloco finally
Podemos tambem adicionar um bloco finally

As instruções que estiverem neste bloco sempre serão executadas, independente


de ocorrer ou não qualquer exceção

Pode ser utilizado para liberar recursos externos, como arquivos abertos ou
conexão de banco de dados sem precisarem aguardar até que o coletor de lixo em
tempo de execução possa finalizar os objetos.

Por exemplo

Independente do que ocorrer o foco sempre será atribuído ao controle txtNome

Propriedade StackTrace

A classe Exception tem uma propriedade chamada StackTrace que mostra a


seqüência de chamada aos métodos quando ocorre uma exceção.

O objeto StackTrace é criado automaticamente pelo CLR

Exemplo
Verificando nome em branco

Observe que deu erro no método ValidarNome, o qual foi chamado pelo método
cmdIncluir_Click

Introdução à Orientação a Objetos

Orientação a Objeto é uma série de conceitos aplicados à linguagem de


programação que ajuda a definir a estrutura de programas, baseado nos conceitos
do mundo real, sejam eles reais ou abstratos.

A Orientação a Objeto permite criar programas , que separam as partes do sistema


por responsabilidades e fazendo com que essas partes se comuniquem entre si, por
meio de mensagens.
Por exemplo uma parte da equipe poderia criar as classes contendo as regras de
negócios e uma outra parte poderia criar as telas gráficas, seja para desktop ou
para a web.

Dentre as vantagens que a OO proporciona, podemos destacar o aumento de


produtividade, reutilização de código, redução das linhas de código programadas,
separação de responsabilidades, encapsulamento, polimorfismo, componentização,
maior flexibilidade do sistema, dentre outras vantagens.

Definição de Classes

Uma classe, nada mais é, do que a definição do que será um objeto.

As classes definem a estrutura e o comportamento dos objetos daquele


determinado tipo.

Podemos dizer que as classes são, na verdade, modelos de objetos do mesmo tipo.

Representação Gráfica de uma Classe

A partir desta classe Carros, podemos criar vários objetos.

Mais à frente veremos maiores detalhes sobre atributos e métodos das classes.

Observação
Para facilitar a assimilação inicial do conceito de uma classe você pode fazer uma
analogia em relação a construção de uma casa.

Para construir uma casa você deve ter o projeto da casa.


No projeto consta todas as especificações de como a casa será construída.

A partir deste projeto, se você quiser, você poderia construir varias casas.

Neste exemplo o projeto seria a nossa classe e as casas seriam os objetos criados a
partir desta classe.

Exemplo Classe Carro

Abaixo temos o código da classe Carro

Observações
Para classes públicas, recomendamos que cada classe seja criada em um arquivo e
que o nome do arquivo seja idêntico ao nome da classe.

Observe que esta classe não tem o método main, ou seja ela não poderá ser
executada diretamente.

Esta classe será utilizada a partir de algum formulário.

Objetos

Um objeto, nada mais é do que uma instância de classe.

O objeto criado fica armazenado na memória, permitindo assim a utilização de seus


atributos e métodos.

Os Objetos possuem:

• Estado (atributos)
• Comportamento (métodos)
• Identidade (cada objeto é único)

Os objetos se comunicam entre sim por meio de mensagens (chamadas aos


métodos).

Observação

Um método nada mais é do que um procedimento ou uma função criado dentro de


uma classe.

No C# todo procedimento ou função deve ser criado dentro de uma classe, portanto
utilizaremos sempre o termo método, independente se o procedimento retorna ou
não um valor.

Um procedimento é um bloco de instruções, ao qual foi atribuído um nome.


Uma função é um procedimento que retorna um valor.

Instâncias da Classe

Uma instância, nada mais é do que uma cópia da classe na memória.

Criando duas instâncias (objetos) da classe Carro


À partir de uma classe podemos criar vários objetos.

No exemplo acima c1 e c2 são objetos.

Poderíamos desmembrar a instrução acima e duas partes:

Ou seja c1 é uma variável de objeto que representa uma instancia da classe.

A partir de c1 e c2 teremos acesso aos atributos e métodos da classe Carro.

Observação

As variáveis não guardam os objetos, mas sim uma referência para a área de
memória onde os objetos estão alocados.

Utilizando a classe Carros

Após instanciar a classe temos acesso aos métodos e atributos da classe.

Observações
• Utilize sempre a complementação de código, alem de mais produtivo,
haverá menos chance de erros.
• Você pode utilizar qualquer atributo ou método listado.
• Não adianta tentar digitar algo que não apareça, com certeza estará errado.

Utilizando a classe

Exemplo utilizando a classe Carros

Onde criamos uma instancia da classe Carros

Configuramos alguns atributos

Executamos alguns métodos

Atributos da Classe

Através dos atributos da classe é que podemos passar e receber valores para a
classe.

Os atributos de uma classe podem ser de dois tipos:

• Campos
• Propriedades

Campos
Campos são simplesmente variáveis, visíveis a partir das instâncias da classe.
Propriedades
Propriedades são mais sofisticadas podendo ter um bloco get (utilizado para ler um
valor) e um bloco set (utilizado para atribuir um valor) utilizados para atribuir
valores para uma variável privada.

Mais à frente veremos em detalhes como trabalhar com as 2 formas de atributos.

Atributos tipo Campo

Atributos do tipo campo nada mais são do que variáveis públicas (visíveis fora da
classe, mais à frente detalharemos melhor este escopo)

Os atributos são inicializados durante a criação do seu objeto.

Valores da inicialização:

• Numéricos como 0
• Strings como null
• Booleanos como false
• Objetos como null

Exemplo Atributos Tipo Campo

Criando a classe Clientes

Criando um formulário para testar a classe.


Código do botão Verificar

Definindo um valor padrão para os atributos

Os atributos podem receber um valor padrão, definido na sua declaração.

Se executar novamente teremos o seguinte resultado:


Propriedades da Classe

Veja abaixo dois exemplos de atributos, o primeiro do tipo campo, e o segundo do


tipo propriedade.

Atributo tipo campo

Atributo tipo Propriedade

Ao contrario de um campo, uma propriedade é mais sofisticada.

Veja o exemplo abaixo


Observações

Observe que a estrutura de uma propriedade é mais sofisticada e segue o seguinte


padrão:

A variável privada esta escrita no padrão camelCase.

Já o nome da propriedade é escrita no padrão PascalCase

Por exemplo, para criar uma propriedade chamada NomeCliente.


Teríamos uma variável privada chamada nomeCliente

O padrão camelCase significa que o nome do identificador deve começar em


minúscula e a primeira letra de cada palavra concatenada em maiúscula.

O padrão PascalCase significa que o nome do identificador deve começar em


maiúscula e a primeira letra de cada palavra concatenada em maiúscula.

Diagrama de Classes Utilizando Propriedades

Diagrama
Vantagens de utilizar propriedades

As principais vantagens em utilizar propriedades são:

• Padrão amplamente utilizado no C#


• Permite validar os valores que estão entrando e saindo da classe.
• Isola o ambiente externo do ambiente interno da classe.
• Podemos definir se haverá apenas get, set ou ambos.

Código completo da classe Clientes

Criando propriedades com a ajuda do Editor

1- Crie a classe e digite apenas as variáveis locais

2- Clique com o botão direito do mouse sobre o nome da variável.

Selecione a opção Encapsulate Field, conforme figura abaixo


3- Altere o nome da propriedade se necessário.

4- Clique no botão OK
Observação
Esta funcionalidade não está disponível nas versões Express do Visual Studio

Trabalhando com as Propriedades

Utilizando a classe Clientes

Nota
Observe que a forma de atribuir valores às propriedades é o mesmo em relação aos
atributos.

Atributos Estáticos

Atributos estáticos não devem ser instanciados da classe para serem usados

Eles não alocam espaço para cada instância da classe.

No exemplo abaixo alteramos o atributo cor para estático.

Observe que ao instanciar a classe o atributo cor não esta mais disponível.
Para acessar o atributo cor utilizamos diretamente a partir da classe.

Métodos Estáticos

Assim como há atributos estáticos podemos ter métodos estáticos.

Para utilizar os métodos estáticos, você não deve instanciar a classe. Veja exemplo
abaixo

Construtores da Classe

Um construtor é um método, particular, que tem as seguintes características:


Tem o mesmo nome da classe

Não tem tipo de dados

Primeiro vamos analisar a classe Conexao sem o construtor.

Testando a classe conexão

Criando o formulário para teste

Código do botão Conectar

Observe que como o Status, dentro da classe Conexao, foi inicializado com a string
Valor inicial, este será o valor que aparecerá no label

Classe Conexao com construtor

Observe no código abaixo, que foi adicionado um construtor,


que altera o valor da variável Status para Construtor padrão
Execute novamente o teste

Observe que o código, dentro do construtor foi executado automaticamente,


quando a classe foi instanciada.

Métodos das Classes

Método é um termo utilizado para referenciar um procedimento ou uma função, que


foi criada dentro de uma classe.

No C# todos os procedimentos e funções só podem ser criados dentro de classes,


portanto nós os chamamos de métodos, independente se retornam ou não um
valor.

Um método nada mais é do que um bloco de instruções agrupadas e que foi


atribuído um nome.
O método pode ou não retornar um valor.
Os métodos, permitem organizar o código em partes pequenas, especificas para
uma certa funcionalidade.

Veja o exemplo abaixo.


Observação

Observe que os métodos Conectar e Desconectar são do tipo void.

O tipo void significa que ele não irá retornar um valor, é o equivalente a um
procedimento.

Alterando o tipo dos métodos.

Diagrama de classe

Alterando o tipo dos métodos.


Observe que no exemplo abaixo os métodos Conectar e Desconectar, que eram do
tipo void, agora são do bool.
Sempre que o método não for do tipo void é necessário que o mesmo retorne um
valor compatível com o tipo do método.
Para retornar um valor utilizamos a palavra chave return.

Estes métodos equivalente a funções em algumas outras linguagens.

Regras básicas para se criar um método

Os nomes dos métodos devem ser significativos, ou seja ao ler o nome do


método, não deixar duvidas sobre qual é a sua finalidade.

Utilizar sempre o padrão CamelCase, ou seja, o nome do método começa em


maiúscula, já para cada palavra concatenada, a mesma deve iniciar em maiúscula.

O método deve ter uma finalidade bem específica.

O método pode ou não retornar um tipo de dados.

Caso não retorne nada, utilizamos a palavra void, antes do nome do método.

Sobrecarga de Métodos

No C# pode haver, dentro de uma mesma classe, métodos com nomes iguais, mas
com parâmetros diferentes.

É o que chamamos de sobrecarga de métodos.

Basta que a assinatura do método seja diferente.


Assinatura do método significa a combinação do nome do método e seus
parâmetros.
Sendo os parâmetros diferentes, seja quanto ao tipo ou a quantidade as assinaturas
serão diferentes.

Veja este pequeno exemplo abaixo

Executando métodos sobrecarregados

Observe que quando você utilizar este método, aparecerá as 3 opções disponíveis
na classe
Se passar uma String como parâmetro o segundo método é que será executado

Como o método Conectar é do tipo bool podemos executar este método conforme
exemplo abaixo:
Observações sobre a Criação de Métodos

Você pode criar o método em qualquer lugar dentro da classe, desde que não seja
dentro de outro método.

Recomendamos organizar da seguinte forma dentro das classes.

Exemplo
Observação

Dentro do método Excluir, utilizamos a variável privada (codigo) e não o nome da


propriedade (Codigo).

Este é o padrão ou seja dentro dos métodos das classes sempre utilizamos
as variáveis privadas.

As propriedades são utilizadas para atribuir e receber valores das classes.

Utilizando os métodos criados


Criando o formulário para teste

Código do botão Excluir

Herança

Herança é capacidade de uma classe herdar os atributos e métodos de outra classe.

Por exemplo, no caso de uma classe para clientes podemos ter clientes pessoas
físicas e clientes pessoas jurídicas.

Todo cliente deve ter um nome e um código.


Deve ter um método para excluir a partir do código fornecido.
Entretanto, pessoas físicas tem CPF, pessoas jurídicas tem CNPJ, alem de outras
características particulares.

Ao criarmos um método para incluir um cliente, teremos que incluir no banco de


dados o CPF ou o CNPJ, dependendo do tipo de cliente.

Através da herança podemos criar classes mais especializadas, por exemplo a


classe Fisica, à partir da classe Cliente.

Neste caso a classe Fisica herdaria os atributos e métodos da classe Cliente.

Diagrama de classes com Herança

A classe Fisica herda os atributos e métodos da classe Cliente, bastando agora


adicionar à classe Fisica os atributos e métodos específicos de um cliente do tipo
pessoa fisica.

Veja abaixo o diagrama de classes

Podemos chamar neste caso a classe Cliente de superclasse ou classe pai.

Dentro da classe Fisica adicionamos o método incluir.

Já a classe Fisica podemos chamar neste caso de classe derivada ou classe filha.
Tambem esta correto dizer que a classe Fisica estende a classe Clientes.

Observação
No C# não existe herança múltipla, ou seja cada classe só pode ter um pai.
Entretanto uma classe pode ter uma ou mais classes filhas.

Exemplo com Herança

Classe Cliente

Classe Fisica
Membros protegidos

Observe que dentro da classe Fisica, as variáveis privadas da classe Cliente não são
visíveis.

Se mudarmos estas variáveis para publicas, elas serão visíveis nas classes
derivadas, mas poderão ser vistas diretamente nas instancias, o que não é
recomendável.

A forma correta de atribuir valores as classes é sempre através das propriedades


(permite validação dos dados), portanto só nos resta utilizar a palavra chave
protected

Um membro protegido é visível dentro da classe em que foi criada, nas classes
derivadas mas não é visível nas instancias da classe

Criando um Membro Protegido

Basta alterar a variável status de privada para protegida.

Testando a classe Clientes


Utilizando a classe Cliente

Utilizando a classe Fisica

Observe que na instancia da classe Fisica a variável protegida status não está
disponível, apenas a propriedade Status
Classe Object

Toda a classe no C# descende direta ou indiretamente da classe Object O

C# foi projetado desta forma de modo que todas as classes tenham um


comportamento padrão.

Por isso é que em qualquer classe criada, no C#, aparecem estes métodos,
provenientes da classe Object

Observe na classe Fisica , por exemplo.


Representação Gráfica da Classe Object

Sobrescrevendo métodos nas classes derivadas

Pode ocorrer que você necessite criar métodos com o mesmo nome nas classes
derivadas, seja porque a funcionalidade é diferente ou por ter a necessidade de
validações adicionais.

Em nosso exemplo, na classe Cliente, o método excluir é baseado no código.

Na classe Fisica necessitamos do método excluir, que seja baseado no CPF do


cliente.
Observe que o método excluir existe nas duas classes.

Podemos utilizar a palavra-chave new que explicitamente oculta um membro


herdado de uma classe base

Exemplo parcial de código

Override

Podemos ao invés de ocultar apenas um método da classe pai, sobrescrever o


mesmo na classe derivada.

Para isso temos de dizer que o método da classe pai é virtual e na classe filha dizer
que estamos sobrescrevendo.

Para tanto utilizamos as palavras chaves virtual e override. Exemplo (Códigos


parciais)
Observação
Na prática a utilização de virtual ou override, praticamente não faz diferença para
quem utiliza a classe Fisica.
De preferência utilize override que economiza memória pois substitui o método da
classe Pai.

Referenciando atributos da classe atual

Observe o código abaixo

Observe que no código acima há 2 métodos com o mesmo nome (Imprimir), mas
com parâmetros diferentes (sobrecarga de métodos).

Observe particularmente esta linha no segundo método imprimir

Estamos obtendo o valor do parâmetro Status e atribuindo para o Status da classe.

A palavra chave this é que esta dizendo que é um atributo da classe.

Se não fosse utilizado a palavra this estaríamos atribuindo o valor do parâmetro


para ele mesmo.

Testando a classe Pai


Código do primeiro botão.

Código do segundo botão.

Ao clicar no primeiro botão

Ao clicar no segundo botão


Referenciando atributos da classe superior

A palavra chave base faz referência a atributos e métodos da classe superior (ou
classe pai)

Exemplo

Observe que na instrução:

Estamos atribuindo o Status da classe Filha para o status da classe Pai

Polimorfismo

Polimorfismo é a capacidade de um objeto se comportar como outro em tempo de


execução.

Vamos fazer algumas alterações nas classes Pai e Filha para poder enxergar o
resultado.

Observe que na classe Filha sobrescrevemos o método Imprimir da classe Pai.


Testando o polimorfismo

Observe no código acima há uma instrução atribuindo b para a

a = b;

A partir dai o objeto a assumiu a forma do objeto b.

Observe no resultado abaixo que a terceira linha, proveniente do a.Imprimir (sendo


que o a é uma instancia da classe Pai) imprimiu o Imprimir da Filha, ou seja o Pai
tomou a forma da Filha.

Ou seja o objeto a que originalmente era uma instancia da classe pai, passou a se
comportar como uma instancia da classe Filha.

O método imprimir, utilizado pelo objeto a, agora foi o método imprimir da classe
Filha

Classes Abstratas

Uma classe abstrata é uma classe que não pode ser instanciada.
Esta classe serve como base para outras classes.

Por exemplo a nossa classe Clientes poderia ser abstrata.


Se alguem quisesse utilizar qualquer método da classe Clientes poderia fazer isto à
partir das classes derivadas, como por exemplo a classe Fisica
Para transformar a classe Clientes em abstrata, basta utilizar a palavra chave
abstract antes do nome da classe.

Se tentarmos instanciar esta classe ocorrerá um erro de sintaxe .

Criando uma classe derivada.

Utilizando a classe derivada.


Observe que agora não há nenhum erro de compilação.

Classes finais
Uma classe final não pode conter classes derivadas, para tanto basta utilizar a
palavra chave sealed

Exemplo

Ou seja não poderemos criar nenhuma classe a partir da classe Pai.

Classes Parciais

Basicamente uma classe parcial é uma classe em que ao invés de se utilizar um


único arquivo físico, se utiliza 2 ou mais arquivos.

Para criar a classe parcial basta utilizar a palavra chave partial.

Veja exemplo abaixo

Arquivo Parcial1.cs

Arquivo Parcial2.cs
Métodos Abstratos

Um método abstrato, não tem corpo, apenas a declaração do método.

Repare no exemplo abaixo que foi adicionado 2 métodos abstratos (Alterar e


Excluir)

Isto significa que as classes derivadas da classe Clientes terão necessariamente que
implementar este 2 métodos.
Classes derivadas de classes abstratas

As classes derivadas, à partir de uma classe que contem métodos abstratos são
obrigadas a implementar estes métodos.

Caso você tente compilar ocorrerá erros, conforme figura abaixo

A classe abstrata, neste caso, se comporta como fosse um contrato que as classes
derivadas devem obedecer

Observação

Uma classe abstrata tem duas finalidades básicas:

• Servir de base para outras classes.


• Obrigar as classes derivadas a implementarem certos métodos

interfaces

As interfaces atuam como um contrato para as classes que a implementam.


Nas interfaces você define os métodos que deverão ser implementados pela classes
derivadas.

As classes que implementam esta interfaces, deve oferecer uma implementação


para cada método definido na sua interface.
As classes podem implementar mais de uma interface.

Para criar uma interface, você cria uma classe comum depois substitui a palavra
chave class pela palavra chave interface.
Depois basta declarar os métodos.

Observe que os métodos não tem corpo.

Adicionando propriedades as interfaces

Observe que nas propriedade definimos o nome, tipo e se terá get, set ou ambos.

Implementando a Interface

Criando uma classe que implementa uma interface


Observe que você implementa uma interface como se fosse uma herança.

Observação
Uma classe pode conter herança e implementar várias interfaces.
Neste caso a herança deve ser a primeira, depois as interfaces, separadas por
virgula.

Caso você tente compilar a classe acima haverá vários erros, pois é necessário criar
nesta classe todas as propriedades e métodos da interface.

Criando as propriedades e métodos da interface.


Delegates

Introdução

Delegate é uma classe especial que funciona como ponteiros para métodos, quando
criamos uma instância dele, passamos ao construtor o nome do método que
desejamos referenciar.

Entenda Delegates como uma analogia do C# aos "ponteiros de função" em C e


Pascal.

Podemos utilizar o conceito de delegate para encapsular métodos que tenham


assinaturas iguais, mas que tenham comportamento diferente.

Por exemplo imagine que você tenha 4 métodos (Somar, Subtrair, Multiplicar e
Dividir), que recebam 2 inteiros e retorne um inteiro.

Podemos criar um delegate chamado Calcular para encapsular os quatro métodos


acima.

Desta forma fica mis simples trabalhar com estes métodos, sempre que necessário.

Exemplo prático

Criando a classe Matemática


Observe que os 4 métodos tem a mesma assinatura e o delegate é compatível com
esta assinatura.

Criando o formulário para teste

O objetivo deste formulário, é baseado nos valores das caixas de texto, calcular o
valor, baseado no botão clicado, utilizando delegates
Utilizando o delegate criado anteriormente

Para utilizar o delegate basta seguir as seguintes etapas:

1- Instanciar a classe para ter acesso aos métodos da mesma

2- Criar uma variável que representa o delegate e definir qual o método que o
mesmo irá executar

3- Passar os valores para o método definido na etapa anterior

Observe que a chamada ao método é feita através da variável que representa o


delegate.
Código do botão Somar

Referenciando vários métodos

Um delegate pode referenciar um ou mais métodos simultaneamente

MeuDelegate instanciaDelegate = new MeuDelegate(metodo1);


instanciaDelegate += metodo2;
instanciaDelegate += metodo3;

Quando executarmos o delegate instanciaDelegate(1,2); os métodos metodo1,


metodo2 e metodo3 serão executadas nessa mesma ordem lembrando que todas
os métodos devem ter a mesma assinatura do MeuDelegate.

Em alguns casos é necessário retirar uma referencia de um método, para fazermos


isso simplesmente escrevemos o seguinte código:

instanciaDelegate -= metodo2;

Agora instanciaDelegate só apontará para os métodos metodo1 e metodo3.

Esta funcionalidade pode ser útil, quando a necessidade de executar vários


métodos para atingir um certo objetivo.

Exemplo de referencias simultâneas

Imagine a impressão de um relatório, bem simplificado, onde talvez você tenha


vários métodos para criar cada parte do relatório (cabeçalho, corpo e rodapé da
página)

Criando a classe Relatorio


Criando o formulário para testar a classe Relatorio

Formulário

Código do botão Imprimir


Observe que a partir da variável que representa o delegate (no caso metodos) ,
podemos adicionar ou remover métodos utilizando os operadores resumidos (+= ou
-=).

Generics
Introdução - Coleções

Para podermos entender o conceito de Generics, primeiro vamos criar um


pequeno exemplo utilizando coleções simples, ou seja sem utilizar Generics.

As coleções são estruturas de dados que auxiliam no trabalho de agrupar diversos


itens de uma forma que nos ajude a resolver algum problema específico.

Todas as coleções do .Net framework estão agrupadas dentro do namespace


System.Collections

Principais coleções

• ArrayList - Organiza os itens na forma de uma lista.


• HashTable- Organiza os itens na forma um dicionário.
• Queue - Organiza os itens na forma de uma fila.
• SortedList - Organiza os itens na forma de uma lista indexada.

• Stack - Organiza os itens na forma de uma pilha.

Exemplo com ArrayList

No exemplo as seguir, criaremos duas classes:

• Aluno
Para conter os dados de um aluno específico
• Alunos
Para gerenciar cada aluno (incluir um aluno por exemplo)

A idéia desta classe é a seguinte:

Ao invés de passar cada atributo de um aluno, através de parametros,


estamos criando uma classe que contenha todos estes atributos (classe Aluno).

Depois criamos uma segunda classe (classe Alunos) que pode conter varios
métodos referente à um cadastro (por exemplo alterar, excluir, incluir), e neste
caso, passamos, ao invés de cada atributo individualmente, passamos como
parametro uma instancia da classe Aluno.

Você pode imaginar esta idéia da seguinte forma em um cadastro de clientes:


Ao invés de fornecer o nome, endereço e telefone, eu forneceria apenas um
cartão de visita que ja tenha estes dados.

Criando as classes

Classe Aluno

Classe Alunos
Observações

Observe que esta classe tem um método chamado IncluirAluno, que recebe
como parametro uma instancia da classe Aluno.
Este método simplesmente adiciona esta instancia para um ArrayList

Nesta classe tem tambem um método chamado ListarAlunos, que simplesmente


retorna uma lista de alunos, no formato de um ArrayList

Utilizando as classes criadas

Basta a partir de algum método instanciar e utilizar estas classes.

Observações
Observe que diretamente a partir da variavel lista, não conseguimos obter os
valores de cada campo, pois para todos os efeitos a variável lista esta sendo
tratada com um objeto.

Tentando acessar o primeiro elemento da lista.

Para acessar corretamente é necessário fazer uma conversão (cast) para o tipo
desejado.

Agora estamos obtendo o primeiro elemento da lista, se comportando como um


objeto do tipo Aluno.
Desta forma temos acesso as propriedades e métodos da classe Aluno

Coleções tipadas - Generics

Embora as coleções tradicionais já sejam extremamente úteis, elas possuem alguns


problemas.

O principal é o fato de só terem a capacidade de colecionar itens do tipo objetc.


Mesmo que você coloque algo diferente de um objeto simples, a coleção ira
armazenar como um objetc.

Desta forma há a necessidade de fazer conversões para obter o valor no formato


desejado.
Como tratar isto de modo a garantir que um elemento é do tipo que você espera?
Sendo possível atribuir qualquer tipo ou objeto dentro de uma coleção.

Não há! Você tem que dizer que tipo de coisa você colocou.

Na versão 2.0 do .NET foi criado o conceito de Generics.

Todas as coleções genéricas do .Net estão agrupadas dentro do namespace


System.Collections.Generics

As principais são:

• LinkedList<> - Organiza os itens na forma de uma lista encadeada.


• List<> - Organiza os itens na forma de uma lista tradicional (como um
ArrayList).
• Queue<> - Organiza os itens na forma de uma fila.
• SortedList<> - Organiza os itens na forma de uma lista indexada.
• SortedDictionary<> - Organiza os itens na forma de um dicionario.
• Stack<> - Organiza os itens na forma de uma pilha.

O uso de Generics basicamente consiste em definir um tipo (tipar)para uma coleção


de modo a garantir que somente um tipo de dado pertença a ela.

Classe Alunos utilizando Generics


Classe Alunos

Agora não é necessário fazer cast na hora de obter os valores um elemento.

Observe que para acessar corretamente não é necessário fazer uma conversão
(cast) para o tipo desejado.
Métodos Genéricos

Um método genérico tem a mesma funcionalidade dos tipos genéricos, ou seja,


suportar tipos fortes, definidos e genéricos.

Assim como nos tipos genéricos, os métodos genéricos existem para permitir a
passagem de valores genéricos para um determinado método.

Exemplo
Abaixo criamos uma classe Generica a partir da classe List

Adicionamos 2 métodos, cuja finalidade é adicionar valores a Lista.


Isto é feito utilizando o método Add (que veio por herança da classe List)
Para utilizar os métodos da classe

Basta instanciar a classe, utilizando o tipo desejado.

1- Exemplo utilizando tipo int


2- Exemplo utilizando strings

S-ar putea să vă placă și