Escolar Documentos
Profissional Documentos
Cultura Documentos
Contedo Pgina
Captulo 1- .NET 1
Framework
O que ? 1
Histria 1
Verses do .NET Framework 2
Principais Recursos por verses 2
Arquitetura bsica 3
O que IL? 3
Garbage Collection 6
GAC 6
LINKS 7
Captulo 2-Microsoft 8
Visual Studio 2010
O que ? 8
Histria 8
Funcionalidades por verses 8
Como iniciar? 8
Estrutura de um projeto e tipos de 10
arquivos bsicos
Templates 11
Code Snippet 12
Ferramentas de analise de cdigo 13
Principais janelas do VS 2010 13
Debugando com VS 2010 13
IntelliTrace 14
Gerando um release 16
LINKS 16
Captulo 3-Microsoft C# 17
O que ? 17
Histria 17
Viso conceitual classes 17
Namespaces 18
Using 18
Tipos de dados bsicos 19
Tipos de valor e de referncia 20
Varveis 21
Operadores 21
Desvios condicionais 24
Switch 25
Estruturas de repetio 26
Tratamento de erro 30
Arrays e Lists 30
Windows Forms 32
Eventos 32
Guia rpido: Hello World 33
Principais componentes Windows 34
Forms
Trabalhando com arquivo texto 51
Modificadores de acesso 53
Classes 53
Propriedades e variveis 53
Construtores 54
Mtodos 56
Sobrecarga 57
Enums 59
Herana 59
Classes e mtodos estticos 60
Converses 61
Interfaces 61
ADO.net Trabalhando com 62
bancos de dados
Criao de controles 65
customizados
Generics 66
Lambda Expressions 67
Reflection 68
LINKS 71
Captulo 4 Orientao a 72
objetos
Pilares 72
Princpios 73
1 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
O que ?
Microsoft .NET componente construdo pela Microsoft, que visa uma plataforma nica para desenvolvimento e
execuo de sistemas e aplicaes. Todo e qualquer cdigo gerado para .NET, pode ser executado em qualquer dispositivo que
possua o framework de tal plataforma instalado. Dessa forma o programador deixa de escrever cdigo para um sistema ou
dispositivo especfico, e passa a escrever para a plataforma.NET.
Histria
A Microsoft lanou o .net Framework em 2001 com a inteno de redefinir a maneira que escrevemos programas para Windows e
tambm pra web, a iniciativa .net travou uma rdua briga com a Sun Microsystems em relao a verso da Microsoft da
linguagem java que era a mais usada para desenvolvimento de aplicativos .net quando o framework surgiu. Esta implementao
especfica do java concebida pela Microsoft foi nomeada J++ e sua biblioteca de classe WFC(Windows foundation Classes) foi
em grande parte desenhada por Ander Hejlsber um ex-funcionrio da Borland que ficou conhecido pela sua participao
nas linguagens Pascal, Turbo Pascal,Borland Pascal e Delphi. Posteriormente o Visual J + +( Visual Studio 6.0 foi o ltimo a
conter suporte a essa linguagem) foi descontinuado, Hejlsberg foi nomeado arquiteto-chefe da linguagem C # e um dos principais
desenvolvedores do .NET Framework.
2 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Cada verso do .net framework tem suas particularidades, porm toda verso completamente compatveis com as anteriores
minimizando assim o impacto da migrao de uma verso para outra, inclusive mdulos compilados em uma verso mais antiga
pode ser carregado em um aplicativo construdo com uma verso mais atual. Na tabela abaixo temos os principais alteraes
ocorridas em cada verso do .net framework, notem que nem sempre o CLR atualizado a cada verso do .net quer dizer que
apenas novos mdulos foram adicionados mas a forma de gerenciamento do cdigo permanece a mesma.
3.0 2.0 Visual Studio 2005 Esta verso essencialmente o .NET Framework 2.0 com a
adio do Windows Presentation Foundation (WPF), o
Windows Communications Foundation (WCF), o Windows
Workflow Foundation (WF) e o CardSpace. Posteriormente foi
atualizado com o SP1 e o SP2.
3.5 2.0 Visual Studio 2008 Acrescentou novas funcionalidades, tais como suporte a AJAX
e LINQ. A atualizao do SP1, acrescentou ao. NET
Framework, dados dinmicos, e um pequeno conjunto de
melhorias adicionais.
4 4 Visual Studio 2010 Inclui uma nova verso do CLR, bibliotecas de classes bsicas
e novas funcionalidades, tais como o Managed Extensibility
Framework (MEF) , dynamic language runtime (DLR) e code
contracts.
3 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Arquitetura bsica
O Microsoft .NET Framework composto por 2 componentes principais: o CLR(Common Language Runtime) e a biblioteca de
classes. O Common Language Runtime a base do Framework .NET. Voc pode pensar no Runtime como um agente que gere
cdigo em tempo de execuo, fornecendo principalmente servios como gerenciamento de memria, gerenciamento de segmento
e processamento remoto, ao mesmo tempo a segurana de tipos estritos e outras formas de preciso de cdigo que promovem
segurana e robustez. Na verdade, o conceito de gerenciamento de cdigo um princpio fundamental do runtime. Cdigo
rodando sobre o CLR conhecido como cdigo gerenciado, enquanto o cdigo que no roda sobre ele conhecido como cdigo
no gerenciado. A biblioteca de classes, o outro componente principal do .NET Framework, se trata de uma vasta coleo
orientada a objetos de tipos reutilizveis que voc pode usar para desenvolver aplicaes que vo desde a tradicional linha de
comando at aplicativos com interface grfica do usurio (GUI), para aplicativos com base em inovaes mais recentes fornecidas
pelo ASP.NET, como Web Forms e Servios Web XML.
Abaixo temos uma ilustrao com uma viso holstica da relao entre a biblioteca de classes, o.net framework, sua aplicao e o
sistema operacional ou o hardware.
O que IL?
Uma grande quantidade de linguagens podem ser utilizadas para construo de aplicativos baseados no .net framework , na
verdade qualquer linguagem que possua um compilador IL pode ser utilizada, como exemplo podemos citar C#, VB.NET,
DELPHI.NET e J#, apesar de o C# ter sido adotado como linguagem oficial para o .net framework. O que acontece na verdade
acontece que todo cdigo traduzido na compilao para IL que a abreviao Itermediate language, ou seja, linguagem
intermediria e essa a nica linguagem que o CLR entende sendo interpretada e gerenciada por ele em tempo de execuo e
transformando-a posteriormente em cdigo de mquina(binrio), os principais tipos de arquivos gerados por um compilador IL
variam dependendo do tipo de projeto so estes: EXE, DLL e ASPX.
Verso C#;
using System;
namespace HelloWorldIL
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World !");
}
}
}
4 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Verso IL;
A imagem abaixo demonstra o fluxo ocorrido entre a compilao e a execuo de um aplicativo .net.
Voc pode acessar o cdigo em IL de um arquivo .net compilado atravs da ferramenta IL Disassembler que normalmente pode
ser encontrado na pasta do Visual Studio 2010 no menu iniciar-> Microsoft Windows SDK Tools IL Disassemble ou no caminho:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\ildasm.exe
Voc pode tambm escrever um aplicativo utilizando IL diretamente, mas infelizmente o Visual Studio 2010 no oferece suporte
a essa linguagem ento um editor de texto qualquer pode ser utilizado, para compilar utilize a ferramenta ILAsm que vem junto
com o SDK do .net framework e acessvel atravs do prompt do Visual Studio e pode ser encontrado normalmente na pasta do
menu iniciar do Visual Studio->Visual Studio Tools->Visual Studio Command Prompt. Apesar desta prtica no ser muito
6 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
comum nos ajuda a entender como funcionam as coisa por baixo do cap no .net framework e tambm pode ser utilizado para
criar programas em tempo de execuo(Reflection.Emitting).
Garbage Collection
O Garbage Collection um recurso do Common Language Runtime que faz o gerenciamento automtico da memria e oferece os
seguintes benefcios:
Permite que voc desenvolva sua aplicao sem a necessidade de liberar memria.
Aloca objetos no heap gerenciado de forma eficiente.
Identifica objetos que no esto mais sendo usados, apaga-os da memria e a mantm disponvel para futuras atribuies.
Objetos gerenciados automaticamente tm o espao para seus atributos previamente alocados, assim o construtor no
precisa inicializar cada um deles.
Fornece segurana de memria, certificando-se que um objeto no pode usar o contedo de outro objeto.
GAC
GAC a abreviaes para Global Assembly Cache que consiste em um sistema robusto e unificado servio de
gerenciamento de DLLS compartilhadas, com ele aplicaes podem usar diferentes verses da mesma DLL instalada no disco.
7 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
LINKS
Viso conceitural do .net framework - http://msdn.microsoft.com/pt-br/library/zw4w595w.aspx
O que ?
O Microsoft Visual Studio uma IDE(integrated development enviroment) , se trata uma plataforma multi linguagem concebida
pela Microsoft que apresenta facilidades significativas para o desenvolvimento de software englobando um srie de
funcionalidades que auxiliam nas rotinas de desenvolvimento, pode ser usada para desenvolver aplicaes console ou grficas
atravs das bibliotecas Windows Forms, web sites, aplicaes web e web services.
Apesar de ser um software proprietrio, existem as verses gratuitas chamadas de express que possuem menos recursos e so
voltadas para um linguagem especfica como Visual C# Express,Visual C++ dentro outras.
Histria
A primeira verso do Visual Studio foi o Visual Studio 97 que agregou grande parte das ferramentas necessrias para o
desenvolvimento de software pela primeira vez. O Visual Studio 97 teve duas verses, Visual Studio Professional e o Visual
Studio Enterprise. As linguagem suportadas eram Visual Basic 5.0 e Visual C++ 5.0 voltados ao desenvolvimento para Windows,
J++ 1.1 para programao para JVM, Visual Fox Pro 5.0 para programao de bancos de dados e tambm foi introduzido suporte
construo de sites de contedo dinmico atravs do Active Server Page(ASP), em 2002 foi lanado o primeiro Visual Studio
voltado a programao com .net. A verso atual da IDE o Microsoft Visual Studio 2010 e esta ser a que utilizaremos como
ferramenta padro de desenvolvimento em nosso curso, as principais alteraes ocorridas nessa verso foram a reorganizao da
interface para torna-la mais simples utilizando as novas tecnologias para desenvolvimento de interface criadas pela prpria
Microsoft (WPF). Incluso do DLR - Dynamic Language Runtime no pacote de instalao que d suporte aos tipos dinmico e
metaprogramao, Suporte ao .net framework 4.0 e Suporte ao desenvolvimento de aplicativos para o Windows phone 7.
Como Iniciar?
Agora faremos um rpido guia de como construir uma aplicao simples no VS2010. Para comear o desenvolvimento de um
aplicativo com Visual Studio relativamente simples basta abrir o programa ir at o menu superior na opo File->new->Project.
Uma janela como a da imagem abaixo aparecer:
9 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Do lado direto temos uma lista hierrquica com o ttulo Instaled templates o que seria modelos de projetos para cada tipo de
aplicativo, os templates sero detalhados posteriormente nesse captulo. No caso est selecionada a categoria Windows e dentro
dela h subtipos como Windows Forms Applications e Class Library Application. Na parte superior temos verso do .net que
ser utilizado no projeto no caso selecionado .net framework 4. Na parte inferior temos o nome que queremos dar ao nosso
projeto, e logo abaixo o caminho no computador que os projetos e os arquivos relacionados sero salvos e abaixo o nome da
soluo que funciona como uma agregadora de contedo para podermos organizar um sistema formado de vrios projetos ser
melhor explicada posteriormente nesse captulo.
Temos ainda duas caixas de seleo a primeira indica se gostaramos de criar um diretrio para organizar fisicamente os arquivos
da soluo e o segundo indica se gostaramos de j adicionar o projeto um controle de verso.
Feitas essas configuraes iniciais podemos dar ok e ser criado um projeto de acordo com o template escolhido e este
normalmente apresentado do lado direito na janela Solution Explorer. A partir de agora tomaremos como exemplo o template
Console Application que um dos mais simples para prosseguir esse guia rpido.
10 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
J ser aberto o arquivo com a classe principal do projeto e o mtodo de entrada basta editar a definio do mesmo
implementando as aes que desejar e depois clicar no boto parecido com um play na parte superior da tela ao lado da palavra
debug o seu aplicativo ser executado para que o comportamento do mesmo seja analisado. Vamos supor que
tudo correu bem, o prximo ser alterar o a caixa de seleo onde est escrita a palavra Debug para Release, feito isso basta clicar
com o boto direto sobre a soluo na janela Solution Explorer, ser aberto um menu contextual escolha a opo rebuild e isto
iniciar a montagem do seu aplicativo para um arquivo executvel. Agora basta ir at o diretrio da soluo, procurar a pasta do
projeto, ConsoleApplication1->bin->release, o arquivo executvel estar l dentro, clique duas vezes no mesmo e sua aplicao
ser iniciada.
O Visual Studio tem uma organizao hierrquica que consiste basicamente em Solues, Projetos, Configuraes, itens do
projeto e itens das solues.
-Solues
Funciona como uma forma de organizar os insumos necessrios para execuo e/ou construo de um
sistema, uma soluo pode ter diretrio, projetos e qualquer outro tipo de arquivo que seja importante para o sistema, como uma
imagem ou um documento de texto, cada projeto pode gerar um executvel ou uma dll e pode ter dependncias de outros projetos,
a soluo se encarrega de organizar a ordem de build para que todas dependncias de um projeto que estejam tambm estejam
na forma de projeto sejam compiladas antes do mesmo. A soluo s existe em tempo de desenvolvimento depois de compilado
no gera uma sada significativa e vai depender de como voc organizar os arquivos gerados para realizao com sucesso do
deploy, no computador as solues ficam armazenadas em arquivos com a extenso .sln e voc pode abri-la clicando duas vezes
no arquivo, porm para copiar com sucesso uma soluo o computador deve estar configurado para mostrar arquivos oculto, pois
existe um arquivo com o mesmo nome da soluo com a extenso .suo que precisa ser copiado junto para a pasta destino.
-Projetos
O Projeto a verso em tempo de desenvolvimento de uma aplicao, nele contm todos os arquivos de cdigos
no compilados os .cs no caso do c#, todas as configuraes por exemplo, as plataformas suportada(X86,X64) e todas as
referncias externas necessrias para o seu funcionamento, na compilao ele que de fato se transforma no produto final. No
computador o projeto em c# ficam armazenados em arquivos com a extenso .csproj e voc pode abri-lo no Visual Studio
11 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
clicando sobre esse arquivo, porm na verdade ele se trata de um arquivo XML em um padro estabelecido pelo VS, voc pode
acessar e editar diretamente esse arquivo XML clicando com o boto direito sobre o arquivo e seleciona abri com... notepad.
-Propriedades
Praticamente todos os templates de projetos criam um item chamado properties onde podem ser configurados os
principais aspectos do projeto, apesar de poder ser considerado como um item do projeto merece uma ateno especial, abaixo as
principais configuraes que podem ser feitas no properties de um projeto para Windows.
As propriedades no so salvas em um arquivo nico com uma extenso especfica, mas esto distribudas nos arquivos .csproj,
no arquivo AssembyInfo.cs e quando adicionados recursos no arquivo tambm nos arquivos .resx e no Resource.Design.cs,
como os aplicativos .net foram projetados para serem xcopy ou seja basta colocar todas dependncias em uma pasta sem precisar
de criar valores no registro, a maioria dos arquivo que gravam dados sobre aplicativos so xmls em um padro do Visual Studio e
tiveram sua extenso relacionadas com o mesmo.
-Itens do projeto
O projeto como a soluo pode ter praticamente quaisquer tipos de arquivos adicionados entre os seus itens, como
imagens e documentos de textos, mas o principal em aplicaes Windows podemos dizer que so os arquivos .cs que contm o
cdigo fonte de nossos programas, esses arquivos servem apenas para organizar o cdigo, que pode ser separado em arquivos da
forma que for mais conveniente, facilitando o controle de verso e melhorando a semntica.
TEMPLATES
Os templates so modelos pr-definidos para facilitar a incluso de um projeto, o template define quais as referncias necessrias
para um determinado tipo de projeto, por exemplo, a dll System.Windows.Forms do .net framework adicionada no template
Windows application mas no adicionada no template Console application, porm nada impede que essa dll seja adicionada
posteriormente, no template tambm esto definidos os item que sero adicionados ao projeto incialmente tomando novamente
como exemplo Windows Forms e o Console Applications no primeiro um formulrio j vem adicionado no projeto e no
segundo no. No Visual Studio 2010 os templates instalados vo depender das suas escolhas na hora da instalao, mas de
qualquer maneira voc ter uma vasta gama de templates a sua disposio, ainda h templates disponibilizado na internet por
terceiros como Applications for twitter e quando se tratar de algo muito especfico voc mesmo pode fazer os seus templates.
Intellissense
O Intellissense um recurso do Visual Studio 2010 que auxilia na construo do cdigo fonte ele tem o papel de sugerir o
complemento da palavras que estamos digitando e tambm auxiliar na resoluo de problemas, como identificar o namespace que
precisa ser importado. Ao comear escrever uma palavra aparece uma lista do que possivelmente voc pretende escrever, voc
12 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
pode navegar pela lista com as setas do teclado e encontrando a correspondncia que deseja basta dar tab para que a palavra seja
inserida no fonte.
No caso de voc escrever um tipo no reconhecido aparecer um pequeno quadrado sobre ele, basta clicar com o mouse no
mesmo e selecionar a ao desejada, ao renomear algum objeto tambm aparecer o mesmo quadrado clicando nele tero as
opes para ajudar a refatorar o cdigo. Veja na imagem abaixo.
Aqui a sugesto foi apenas de adicionar o namespace que j est disponvel ao contexto atual.
Code Snippet
Os code snnipets alm de auto completar a palavra inserem o restante de cdigo que compe um comando, um exemplo o for
o auto completar ajudaria sugerindo for quando for digitado f, mas no incluiria uma espcie de esqueleto no editor com a
sintaxe bsica do comando. Toda vez que iniciar a digitao de um comando e houve uma espcie de um papel partido na frente
da sugesto de complemento conforme a imagem abaixo:
Basta apertar duas vezes o Tab que o complemento do comando ser includo, abaixo imagem com o cdigo gerado ao apertar
duas vezes o Tab.
Se voc continuar utilizar o Tab o cursor ser direcionado as partes variveis da funo que so as que esto com o fundo
amarelo na imagem acima.
13 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
O Visual Studio tem algumas ferramentas que auxiliam a melhorar e manter a qualidade dos projetos uma especialmente
interessante.
Essa ferramenta fornece uma srie de ndices sobre a qualidade do cdigo, ajuda avaliar o trabalho feito e tambm interessante
para analisar se as mudanas feitas melhoraram ou pioram os aspectos avaliados. Ela muito simples de usar basta clicar com o
boto direito sobre a soluo ou sobre um projeto especfico e selecionar a opo Calculate Code Metrics, ser aberta uma
janela e um ndice geral atribudo para cada item, inclusive ele ajuda voc interpreta-los, possvel ir abrindo nveis at chegar
nas funes que esto piorando os indces.
ToolBox
Concentra os itens que podemos utilizar dependendo do contexto, no desenvolvimento de aplicativos Windows estaro disponvel
na ToolBox os controles nativos para esse tipo aplicao como textbox,lable,combobox,datagrid e datetimepiker . Eventualmente
poder conter tambm controles definido pelo usurio. Pode ser acessada pelo menu:View->Toolbox ou pelo atalho Ctrl+W,X.
Solution Explorer
Essa janela apresenta uma lista hierrquica representando a soluo com todos seus itens. Pode ser acessada atravs do
menu:View->Solution Explorer ou pelo atalho Ctrl+W,S.
Server Explorer
Essa janela serve para gerenciar conexes com bancos de dados. Pode ser usada para localizar Windows Services ativos e servir
como DataSources. Pode ser acessada atravs do menu:View->Server Explorer ou pelo atalho Ctrl+W,L.
Properties
Essa janela apresenta as propriedade da maioria dos itens selecionveis no Visual Studio 2010 como controles e projetos. Pode ser
acessada clicando com o boto direito sobre o item deseja e selecionando a opo properties no menu contextual, pelo menu
principal: View->Propertie Window ou ainda pelo atalho Ctrl+W,P.
Document Outline
Essa janela apresenta uma lista hierrquica com todos os componentes contidos em um formulrio, uma tima opo para
navegar entre eles. Pode ser acessada pelo menu:View->Other Windows->Document Outline ou pelo atalho Ctrl+W,U.
Immediate
Essa s acessvel em tempo de depurao e serve para execuo de comandos, utilizando os objetos carregados no escopo em
que a aplicao foi pausada, interessante usa-la para avaliar os comportamentos individuais dos objetos. Pode ser acessada pelo
menu: Debug->Windows->Immediate ou pelo atalho Ctrl+D,I.
Para debugar o cdigo no Visual Studio, basta selecionar a opo Debug na caixa de seleo da barra de ferramentas padro e
clicar no boto Start Debugging se trata do boto do lado da caixa onde foi escolhida a opo Debug com um cone parecido com
um play ou ainda apertar o atalho F5. O programa ser executado no modo debbug. Pontos de parada podem ser adicionados ao
cdigo selecionando a linha em que deseja que ocorra a interrupo e apertando o atalho f9, uma bola vermelha ser adicionada do
lado esquerdo da linha e a mesma ter a cor do plano de fundo alterada para vermelho conforme imagem abaixo:
14 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Assim a execuo do programa ser interrompida quando chegar a este ponto uma seta amarela apontar para a linha indicando
que a execuo est parada naquele ponto conforme a imagem abaixo.
O desenvolvedor poder fazer basicamente 3 coisas a partir desse ponto, executar o prximo passo sem passar na definio do
mtodo(F10), executar o prximo passo passando por dentro da definio do mtodo(F11) ou voltar a execuo normal do
programa(F5). No Visual Studio voc pode voltar execuo do programa arrastando a seta amarela para a linha desejada.
Enquanto o programa estiver parado o desenvolvedor pode analisar os valores das variveis colocando o mouse sobre elas, em
quais condies a linha de execuo entrou ao ver por onde a seta amarela est se movendo e fazer simulaes com a Immediate
Window, dentre outras coisas ou seja analisar passo a passo o que est acontecendo com o sistema afim de solucionar problemas.
Para analisar valores de um objeto podemos utilizar a funo QuickWatch, para acessa-la s selecionar o objeto em questo e
clicar com o boto direto sobre, como na imagem abaixo:
Selecionar a opo QuickWatch, uma popup como a da imagem abaixo ser exibida mostrando as informaes do objeto:
Nela temos o nome do objeto, o valor e o tipo, no caso de objetos que tm propriedades poderamos navegar entre elas verificando
cada um de seus valores.
A execuo do programa pode ser Interrompida tambm pelo boto Break All presente na barra de ferramentas Debug, o
cone do boto tem o aspecto de um smbolo de Pause ou pelo atalho Ctrl+Alt+Break. Para encerrar o Debug e consequentemente
a execuo da aplicao basta fecha-la ou selecionar o boto Stop Debugging na barra de ferramentas Debug ou ainda acionar
o atalho Shift+F5.
IntelliTrace
Intellitrace uma nova tecnologia de rastreamento disponvel apenas para usurios do Visual Studio 2010 Ultimate.
Com o Intellitrace mensagens sobre os eventos ocorrido na aplicao so automaticamente emitidas pelo Visual
15 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Studio em segundo plano para um arquivo .iTrace, onde podem ser recuperadas e examinados para
fins de depurao. O Intellitrace altamente configurvel no que diz respeito ao tipo e quantidade
de informao que voc deseja gravar e com as configuraes padro tem muito pouco impacto sobre a performance da execuo
durante a depurao.
Habilitando o IntelliTrace
O IntelliTrace j vem habilitado por padro e os eventos do Intellitrace so registrados automaticamente. Esse evento representam
os eventos da aplicao e as gravaes dessas informaes causam um impacto to pequeno que se torna praticamente
imperceptvel na execuo do aplicativo. Voc pode tambm configurar o IntelliTrace para registrar as chamadas de funo,
informao sobre os parmetros passados e eventos disparados por componentes.
Porm registrando essas informao pode haver uma degradao da performance que por outro lado proporciona mais dados para
depurao.
1-Selecionar Tools->Options - Na lista da direita da popup que aparecer seleciona IntelliTrace e por fim marque a opo Enable
IntelliTrace.
2-Para habilitar o registro sobre chamada de funo e eventos selecione a opo IntelliTrace Events and Call Informations.
Os arquivos do IntelliTrace podem ser salvos em disco para posterior analise. Para selecionar o local onde ficar esse arquivo
pode ser escolhido seguindo os seguintes passos:
1- Selecionar Tools->Options->Na lista da direita da popup que aparecer expanda a opo IntelliTrace.
2-Selecione Advanced.
3-Se a opo Store IntelliTrace recordings in this directory estiver desmarcada, marque-a.
Os tipo de eventos a serem registrados pelo IntelliTrace so altamente configurveis. Voc pode registrar todos os eventos
disponveis ou limitar o registro apenas aos tipos de eventos que lhe interessar seguindo estes passos:
1- Selecionar Tools->Options->Na lista da direita da popup que aparecer expanda a opo IntelliTrace.
3-Aparecer uma srie de tipos de eventos, basta marca-los e desmarca-los para incluir ou excluir dos tipos de eventos a serem
registrados pelo intellitrace.
Voc pode ver os eventos do IntelliTrace em tempo de depurao atravs da janela do IntelliTrace.
Gerando um release
Para gerar um release no Visual Studio 2010 basta mudar o valor da caixa de seleo Solutions Configurations na barra de
tarefas padro para release clicar com um boto direto sobre um projeto ou sobre a soluo no caso de querer compilar todos
os projetos que estiverem contidos na mesma e no menu contextual selecionar rebuild.
LINKS
Captulo 3-Microsoft C#
O que ?
C # uma linguagem de programao multi-paradigma fortemente tipada, imperativa, declarativa, funcional, genrica, orientada
a objetos (class-based) e orientada a componentes. Ele foi desenvolvido pela Microsoft como parte da iniciativa
.net e posteriormente aprovada como padro pelo Ecma (ECMA-334) e ISO (ISO / IEC 23270). C # uma das linguagens de
programao projetadas para o Common Language Infrastructure.
C # destinado a ser uma linguagem orientada a objetos, simples, moderna e de propsito geral. A sua equipe de
desenvolvimento liderada por Anders Hejlsberg.
Histria
Durante o desenvolvimento do .net Framework as biblioteca de classes foram originalmente escrita utilizando um sistema
compilador de cdigo gerenciado chamado Simple Managed C(SMC). Em janeiro de 1999 Anders Hejlsberg formou um time para
construir uma nova linguagem por hora chamada de Cool um Acrnimo para Clique Object Oriented Language. A Microsoft
chegou a considerar deixar Cool como o nome final da linguagem, mas mudou de ideia por razes comerciais. O C# foi anunciado
oficialmente em julho de 2000 e neste momento a biblioteca de classes do ASP.net j havia sido reescrita em c#.
//Contrutores
public [Nome da classe]();
//Funes
public void Method1();
public void MethodN...();
}
18 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Namespaces
Os Namespaces servem como uma forma de dividir os objetos em categorias, normalmente de acordo com sua natureza,
independente do projeto ou arquivo que esto.
Sintaxe bsica
namespace [NomeNameEspace]{
...//Objetos definidos no namespace
}
Namespaces podem conter outros namespace formando uma estrutura hierrquica, veja o exemplo abaixo:
namespace Animal
{
namespace Caninos
{
namespace Cachorro
{
public class Poodle
{
}
}
}
}
Isso permite ter o mesmo nome de classe em namespaces diferentes, pois o nome completo da classe consiste em cada um de seus
namespaces separados por um ponto com o nome da classe no final, tambm separado por um ponto. Sendo assim o nome
completo da classe Poodle seria Animal.Caninos.Cachorro.Poodle, esse nome no precisa ser escrito completo a toda hora
graas ao comando using que ser detalhado a seguir.
Using
Esse outro elemento bsico da sintaxe do C# ele serve para que todos os tipos definidos em um namespace fiquem disponveis
sem escrever o seu nome completo. Abaixo um exemplo:
Temos 3 classes Poodle,PastorAlemao e Canil, as duas primeiras esto no namespace Animais e a ltima est no namespace
Lugares, precisamos declarar um objeto Poodle e um PastorAlemo na classe Canil, abaixo o cdigo sem a utilizao de using:
namespace Lugares
{
public class Canil
{
Animais.Poodle Cachorro1;
Animais.PastorAlemao Cachorro2;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
19 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
using System.Text;
using Animais;
namespace Lugares
{
public class Canil
{
Poodle Cachorro1;
PastorAlemao Cachorro2;
}
}
Observe os outros namespaces antes de Animais, so onde esto os tipos fundamentais do framework e por padro so
adicionados ao criar uma classe.
C# uma linguagem fortemente tipada. Cada varivel e constante tem um tipo explcito. Cada assinatura do mtodo Especifica
um tipo para cada parmetro de entrada e o valor de retorno. A.NET Framework class library define um conjunto de tipos
numricos internos, como tambm os tipos mais complexos que representam uma ampla variedade de construes lgicas, como,
por exemplo, sistema de arquivos, conexes de rede, colees e matrizes de objetos e as datas. Um programa C# tpico usa tipos
da biblioteca de classes bem como tipos definidos pelo usurio que modelam os conceitos que so especficos para o domnio do
problema do programa.
O compilador usa informaes do tipo para verificar se todas as operaes que so executadas em seu cdigo so seguras. Por
exemplo, se voc declarar uma varivel do tipo int, o compilador permite usar a varivel em operaes de soma e subtrao. Se
voc tentar executar essas mesmas operaes em uma varivel do tipo bool, o compilador gera um erro.
Tipos inteiros
Tipo Abrangncia Tamanho em bits
sbyte -128 to 127 8
byte 0 to 255 8
char U+0000 to U+ffff 16
short -32,768 to 32,767 16
ushort 0 to 65,535 16
uint 0 to 4,294,967,295 32
-9,223,372,036,854,775,808 to
long 64
9,223,372,036,854,775,807
ulong 0 to 18,446,744,073,709,551,615 64
Os tipos de valor so aqueles tipos que a varivel fica diretamente ligada ao valor atribudo a mesma, e quando passado como
parmetro para alguma funo na verdade copiado para o escopo da funo, o que faz que alteraes feitas nos valores dentro
dela no reflitam no valor original da varivel, a menos que ela seja atribuda novamente no escopo em que foi declarada. J com
tipo de referncia o que ocorre que a varivel esta relacionada a um ponteiro para o espao de memria onde o valor da mesma
est armazenado, ento quando ela passada como parmetro para uma funo a referncia passada e as alteraes de valores
so feitas diretamente no espao de memria que guarda o valor da varivel alterando assim o valor da mesma no escopo original,
porm isso s ocorre quando a palavra reservada ref colocada na assinatura da funo. Abaixo um exemplo para ficar mais
fcil entender o que isso representa.
class Program
{
static void Main(string[] args)
{
string a = "5";
21 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
string b = "2";
String a2="5";
String b2 = "2";
Console.WriteLine("TIPOS DE VALOR...\r\n\r\n");
Console.WriteLine(string.Format("Valores de a e b no escopo que foram definidos a:{0}
b:{1}\r\n",a,b));
Swap(ref a,ref b);
Console.WriteLine(string.Format("Valores de a e b no escopo que foram definidos
continuam os mesmos a:{0} b:{1}\r\n",a2,b2));
Console.WriteLine("TIPOS DE REFERNCIA...\r\n\r\n");
Console.WriteLine(string.Format("Valores de a e b no escopo que foram definidos a:{0}
b:{1}\r\n",a2,b2));
Swap(ref a2,ref b2);
Console.WriteLine(string.Format("Valores de a e b no escopo que foram definidos mudam
a:{0} b:{1}\r\n",a2,b2));
Console.ReadKey();
}
public static void Swap(ref String a,ref String b)
{
string c;
c = a;
a = b;
b = c;
Console.WriteLine(string.Format("Valores de a e b no escopo da funo a:{0}
b:{1}\r\n",a,b));
}
Escrevam esse cdigo em um projeto do tipo Console Application do Visual Studio e percebam que os valores de a e b foram
alterados dentro da funo, mas na classe main permaneceram os mesmos, j de a2 e b2 tiveram os seus valores alterados tambm
no escopo principal. Dos tipos apresentados nas tabelas acima apenas DateTime de referncia os demais so de valor, porm
todos os tipos citados tem um correspondente de referncia que fazem parte do .net Framework.
Variveis
Variveis so simplesmente locais de armazenamento de dados. Voc pode armazenar e recuperar os dados atravs de um nome
atribudo varivel. Quando criamos uma varivel precisamos dizer o tipo de dado a ser armazenado na mesma e atribuir-lhe um
nome, a sintaxe para isso em C# a seguinte:
Exemplo:
int Numero;
As variveis assim como as funes s podem ser definidas dentro de uma classe.
Operadores
Um operando pode ser uma expresso vlida de qualquer tamanho, e pode ser composto por qualquer numero de outras
expresses. Em uma expresso que contenha mltiplos operadores, a ordem na qual os operadores sero aplicados determinada
pela ordem de precedncia do operador, associatividade e posicionamento de parnteses.
22 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Cada operador tem uma precedncia definida. Em uma expresso que contenham mltiplos operadores com ordem de precedncia
diferentes, a precedncia dos operadores determina a ordem que os operadores sero executados. Por exemplo, a expresso
seguinte atribui o valor 3 para n1.
n1 = 11 - 2 * 4;
As tabelas a seguir separam os operadores em categorias baseadas no tipo de operaes que realizam. As
categorias esto listadas em ordem de precedncia.
Operaes primrias
Expresso Descrio
x.y Acesso de associado
f(x) Invocao de mtodos e delegates
a[x] Array and indexer access
x++ Ps-incremento
x-- Ps-decremento
new T(...) Criao de objetos e delegates
new T(...){...} Criao de objeto com inicializador.
new {...} Inicializador de objeto annimo.
new T[...] Criao de array
typeof(T) Obtm o Sytem.Type para T
checked(x) Executa a expresso em um contexto checado
unchecked(x) Executa a expresso em um contexto no checado
default (T) Obtm o valor default para T
delegate {} Funo annima(Mtodo annimo)
Operadores unrios
Expresso Descrio
+x Identidade
-x Negao
!x Negao lgica
~x Negao bit bit
++x Pr-Incremento
--x Pr-decremento
(T)x Converso explicita para o tipo T
Operadores multiplicativos
Expresso Descrio
* Multiplicao
/ Diviso
% Resto
Operadores Aditivos
Expresso Descrio
x+y Adio, concatenao de string, combinao de delegate.
x-y Subtrao remoo de delegate.
Operadores de troca
23 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Expresso Descrio
x << y Troca direita
x >> y Troca esquerda
Expresso Descrio
x<y Menor
x>y Maior
x <= y Menor ou igual
x >= y Maior ou igual
x is T Retorna se x do tipo T.
x as T Retorna x tipado como T ou nulo se no for possvel.
Operadores de igualdade
Expresso Descrio
x == y Igual
x != y Diferente
Expresso Descrio
= Atribuio
x op= y Compound assignment. Supports these operators: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>=
(T x) => y Funo annima (lambda expression.)
//Operador de pr-incremento(++)
int PreIncremento = 1;
PreIncremento = ++PreIncremento;
Console.WriteLine(PreIncremento);
24 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
//Sada "2"
//Operador ps-incremento
int PosIncremento = 1;
PosIncremento = PosIncremento++;
Console.WriteLine(PosIncremento);
//Sada "1", pois primeiro ele atribui o valor a varivel e depois incrementa o valor.
Console.WriteLine(n1 + n2);
//Sada "6", 4+2
Console.WriteLine(n1 * n2);
//Sada "8", 4*2
Console.WriteLine(n1 / n2);
//Sada "2", 4/2
Console.WriteLine(n1 - n2);
//Sada "2", 4-2
Console.ReadKey();
Desvios condicionais
A instruo if usada para realizar desvios condicionais no C#. Com ele o fluxo de execuo pode ser alterado de acordo com o
retorno de expresses booleanas, a sintaxe do comando a seguinte:
Trecho de cdigo...
Voc pode definir o segmento else para um if que serve como fluxo alternativo caso a condio testada seja falsa.
Trecho de cdigo...
}else{
Trecho de cdigo...
Voc pode ainda testar vrias condies em uma mesma instruo if adicionando segmentos else if, a execuo
passar na primeira e somente na primeira condio verdadeira do if se houver.
Trecho de cdigo...
Trecho de cdigo...
DateTime Dt = DateTime.Now;
if (Dt.Hour < 8)
Console.WriteLine("Est muito cedo....");
else if (Dt.Hour == 8)
Console.WriteLine("Em cima da hora....");
else
Console.WriteLine("Atrasado!");
Switch
O comando switch serve para definirmos aes a serem executadas dependendo do valor de uma varivel ou de uma expresso,
muito utilizado com enumeraes e quando temos um rol de valores conhecidos que a varivel ou a expresso pode assumir.
switch([Nome da varivel]){
....
case[Possvel valor n]
default://Opcional
[Ao padro para caso o valor no esteja definido em nenhum dos Cases];
break;
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
int switchExpression = 3;
switch (switchExpression)
{
// Uma seo de instrues podem ser iniciadas por mais de um valor no caso 0 e 1
case 0:
case 1:
Console.WriteLine("Case 0 or 1");
// para cada case necessrio um break, um return ou um goto.
break;
case 2:
Console.WriteLine("Case 2");
break;
// O cdigo da linha abaixo causa um alerta na compilao, pois nunca ser
executada pelo fato de estar depois do break;
Console.WriteLine("Cdigo irrelevante");
// 7 - 4 abaixo o case est em funo de um expresso matemtica 7-4 ento quando
o valor da varivel for 3 essa condio ser satisfeita.
case 7 - 4:
Console.WriteLine("Case 3");
break;
// Se o valor da vriavel no estiver entre 0, 1, 2, or 3, o cdigo definido no
rtulo default ser executado.
default:
Console.WriteLine("Default case (Opcional)");
break;
}
Estruturas de repetio
Estruturas de repetio so instrues que de acordo com uma condio, executam uma sequncia de aes repetidas um
determinado nmero de vezes. Estruturas de repetio tambm so conhecidas como loops.
As principais instrues para execuo de Loop so: while,do,for e foreach, vamos analisar cada uma separadamente.
WHILE
Um loop while verifica uma condio e em seguida executa um bloco de cdigo enquanto a condio avaliada for verdadeira. A
sua sintaxe a seguinte:
[Conjunto de instrues]
27 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Ao terminar a execuo das instrues dentro do bloco definido para o while a expresso booleana verificada novamente e caso
seja verdadeira o conjunto de instrues executado novamente esse ciclo se repete at que o valor da expresso avaliada no
segmento while seja falsa. No while se na primeira verificao o valor avaliado for falso o bloco de cdigo no executado nem
uma vez.
Exemplo:
//Segmento while, nesse caso verifica se o valor da vriavel i menor que 10.
//O bloco de cdigo ser executado enquanto essa expresso for verdadeira
while (i<10)
{
//Conjunto de instrues a serem executadas
DO
O loop do se comporta como o loop while, porm garantido que o bloco de cdigo seja executado ao menos uma vez, pois a
expresso booleana avaliada depois da execuo do bloco de cdigo.
A sintaxe a seguinte:
do{
[Conjunto de instrues]
}while([Expresso booleana]);
Exemplo:
do
{
//Conjunto de instrues a serem executadas.
//A diferena que mesmo que neste ponto o valor de i seja maior que 10
//Esse bloco de cdigo ser executado ao menos 1 vez.
//Espera que uma tecla seja digitada para encerrar a execuo do programa.
Console.ReadKey();
28 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
FOR
O Loop for tambm executa um bloco de cdigo em funo de uma expresso booleana, com a diferena de possuir em sua
sintaxe a possibilidade de incluir um inicializador e um modificador para uma varivel que existir somente em seu escopo. Essa
instruo largamente utilizada para varrer listas, pois sua sintaxe garante uma semntica melhor em relao ao while quando
necessrio ter um contador das iteraes ocorridas no loop.
Sintaxe:
[Conjunto de instrues]
Exemplos:
/*No segmento for esta sendo feita inicializao de uma vriavel i que ser incrementada
com mais 1
a cada iterao ocorrida, enquanto o valor da vriavel seja menor que o tamanho da
colao de inteiros obtida atravs da propriedade length do valor.
importante lembrar que o ultimo ndice da lista sempre o tamanho da mesma menos 1,
pois a primeira posio 0 e no 1.*/
for (int i = 0; i < valores.Length; i++)
{
//Escreve o valor que est na posio "i" da lista a cada iterao sendo que o "i"
vai sendo incrementado a cada iterao.
//Todos os valores da lista sero escritos na tela em ordem crescente.
Console.WriteLine(valores[i]);
}
Console.WriteLine("Ordem decrescente");
/*Podemos tambm escreve-los de forma decrescente.
Fazendo algumas alteraes no nosso segmento for.
- Iniciando a vriavel i com a ultima posio do array em vez da primeira "0", a
melhor formam de fazer isso
atribuindo o valor da propriedade length -1 ao seu valor.
- Invertendo o sinal da expresso booleana de < para >= e substituindo a propriedade
length pela constante 0.
- Por fim substituindo o operador unrio de incremento(++) para o de decremento(--).
*/
//Espera que uma tecla seja digitada para encerrar a execuo do programa.
Console.ReadKey();
FOREACH
Este um tipo de loop especfico da linguagem C# que veio como uma forma de varrer colees mais eficientemente. Com
foreach no necessrio verificar se o nmero de iteraes menor que o nmero de item em uma coleo e nem acessar o item
da coleo atravs do ndice em funo da varivel do for, pois no foreach ocorre uma iterao para cada item da lista e uma
29 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
varivel assume o valor deste item, qualquer objeto que herde da interface IEnumerable pode ser utilizado como fonte de dados
em um foreach. Listas sero exploradas com mais profundidade neste captulo.
[Conjunto de instrues]
Exemplo:
/*Agora faremos a mesma coisa que nos dois exemplos utilizando for, ou seja mostraremos
os valores do array
* em ordem crescente e decrescente s que utilizando o foreach.*/
/*No segmento foreach temos a declarao de uma vriavel que assumira o valor de um item
da lista de cada vez
* Reparem que o tipo da vriavel devem representar o tipo que a lista rene no caso
int. Depois a palavra reservada in
* que deve ser sucedida pela lista a ser varrida.
*/
foreach (int item in valores)
{
Console.WriteLine(item);
}
//Espera que uma tecla seja digitada para encerrar a execuo do programa.
Console.ReadKey();
BREAK
O comando break pode ser utilizado dentro do bloco de cdigo de qualquer Loop apresentado anteriormente e causa uma
interrupo imediata das iteraes. Pode ser utilizado para quando estamos procurando a primeira ocorrncia de um valor
especfico, abaixo um exemplo.
}
}
Tratamento de erro
O C# implementa uma funcionalidade do framework para tratamento de erros, que consiste na possibilidade de executar uma ao
que trata um exceo gerada pelo programa, de modo que no ocorra uma interrupo na execuo, esse tratamento feito atravs
da instruo try, cuja sintaxe bsica a seguinte:
try{
Exemplo:
try
{
/*Nesse caso ocorrer um erro, pois iniciei o contador do for em 1 o que vai causar
uma tentativa de acesso uma posio que no existe na lista a posio 10 e
apesar da lista
ter 10 valores os ndices vo de 0 a 9, isso provocar o lanamento de uma
exceo no sistema.
*/
for (int i = 1; i < vals.Length+1; i++)
{
Console.WriteLine(vals[i]);
}
}
//O Bloco catch escrever a mensagem de erro retornada no console e evitar que a
execuo do programa seja interrompida.
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
Console.ReadKey();
Arrays e Lists
Muitas vezes no desenvolvimento de aplicaes necessitamos de agrupar determinados tipos de dados em colees, para efeitos de
comparao, ordenao, dentre outros. Em C# possvel fazer esse agrupamento de duas formas.
Atravs de Arrays e Lists, a diferena fundamental entre ambo que o Array precisa ter o seu tamanho definido na sua
inicializao, j as Lists podem crescer indefinidamente. As Lists tambm oferecem mais recursos para tratamento das colees
como consequncia consumem mais processamento. As List foram implementadas sobre o conceito de tipos genricos que sero
detalhados posteriormente nesse captulo, por hora vamos analisar a sintaxe, a utilizao em um contexto e a interoperabilidade
entre ambos.
Arrays
Um Array pode ser composto por vrias dimenses, porm o mais comum o unidimensional cuja sintaxe a seguinte:
int[] Inteiros;
Ou seja basta adicionar um par de colchetes ao lado do tipo da varivel e este passa a representar uma lista unidimensional
daquele mesmo tipo.
Para declarao de um Array multidimensional basta colocar uma vrgula separando as dimenses, por exemplo, a declarao de
um array bidimensional de inteiros ficaria assim:
int[,] MatrizInteiros;
O acesso aos itens dos vetores se d atravs de ndices, sendo cada ndice a posio de uma unidade na matriz, a coleo de
ndices comea em 0 e termina no tamanho do vetor -1, o ndice do ltimo elemento de um vetor de tamanho n igual a n-1.
// Sintaxe alternativa
int[] array3 = { 1, 2, 3, 4, 5, 6 };
Para atribuir um novo valor a esta mesma posio a sintaxe seria a seguinte:
int Elemento=20;
array2[1]=Elemento;
Para acessar o elemento de valor 5 do array multidimensional multiDimensionalArray2 a sintaxe seria a seguinte:
int elemento= multiDimensionalArray2[1,1];
Para atribuir um novo valor a esta mesma posio a sintaxe seria a seguinte:
int Elemento=20;
array2[1,1]=Elemento;
Lists
Os Lists so listas genricas unidimensionais que assumem um determinado tipo. No precisam ter seu tamanho especificado na
inicializao. A List prov algumas funcionalidades a mais que o Array como o mtodo Find, que serve para encontrar
ocorrncias de um determinado valor na lista. Para utilizao do List o namespace System.Collections.Generic do assembly
mscorlib.dll deve estar acessvel.
A incluso de um elemento na lista pode ser feito atravs do mtodo Add. Cuja sintaxe a seguinte:
int Elemento=10;
lst.Add(Elemento);
Interoperabilidade
Uma lista pode ser transformada em um Array atravs do mtodo ToArray(), exemplo abaixo:
int[] Myarray;
List<int> MyList = new List<int>();
Myarray = MyList.ToArray();
MyList = Myarray.ToList();
Todos os itens de um Array podem ser inserido em uma lista atravs do mtodo AddRange([Fonte de dados enumervel]) da
classe List, Exemplo abaixo:
List<int> MyList=new List<int>();
int[] Myarray=new int[10];
MyList.AddRange(Myarray);
Windows Forms
Windows Forms um conjunto de bibliotecas que fornecem funcionalidades para desenvolvimento de aplicaes desktop que
utilizem interaes atravs de janelas no padro Windows. As principais funcionalidades esto na biblioteca
System.WindowsForms.dll. Nesse tpico iremos abordar os principais componentes do Windows forms.
Eventos
A orientao a eventos um dos paradigmas da linguagem C#, isso quer dizer que os componentes executam as suas aes atravs
de eventos. Por exemplo, um componente do tipo boto tem o evento Click, esse evento ser relacionado com um ou mais
mtodos e quando o mesmo ocorrer as instrues contidas nesses mtodos sero executadas.
33 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Vamos fazer passo a passo a criao de um aplicativo Windows forms simples. O famoso Hello World.
V at o menu:File->New->Project.
Clique em Ok.
Clique no controle que acabou de adicionar com o boto direito e escolha a opo Properties.
Na janela que aparecer selecione o item text e mude o valor de button1 para Saudar, conforme imagem abaixo:
Uma lista dos eventos existente para o boto ser exibida, d um duplo clique no evento Click.
Voc ser redirecionado ao arquivo de cdigo onde j ter um mtodo criado e relacionado ao evento Click, coloque o trecho de
cdigo a seguir entre as chaves do mtodo.
//Aqui temos uma chamado ao mtodo show da classe MessageBox , este mtodo exibe uma caixa de dialogo com o texto passado
como parmetro ele.
MessageBox.Show("Hello World");
Principais componentes
Form
O form o elemento fundamental das aplicaes Windows forms e pode hospedar uma srie de outros controles.
O form pode receber as interaes do usurio atravs do mouse ou atravs do teclado, e tambm apresentar dados atravs dos
controles hospedados. Aplicaes mais complexas podem necessitar de uma srie de forms para cumprir seu objetivo. Sempre que
voc criar um projeto do tipo Windows forms um form com o nome form1.cs adicionado, voc pode mudar o nome clicando
sobre ele e apertando a tecla F2, se tudo correr bem todas as referncias para o mesmo tambm sero alteradas. Voc pode
adicionar outros forms ao seu projeto clicando sobre ele com o boto direito, escolhendo a opo new->item no menu contextual.
A janela abaixo aparecer:
35 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Selecione o item Windows Form, mude o nome na caixa de texto abaixo da lista conforme desejado. E clique no boto Add.
36 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
O formulrio pode ser customizado atravs de suas propriedades para altera-las acesse a janela properties, abaixo uma tabela
com as mais importantes e suas respectivas descries:
Propriedade Descrio
(Name) O nome do objeto form.
Backcolor Cor de fundo do formulrio.
BackgroundImage Indica uma imagem para o plano de fundo do formulrio.
Determina como a imagem defina na propriedade BackGroundImage ser apresentada.
BackgroundImage1Layout
ControlBox Determina quando o form tem um ControBox.
Cursor Aparncia do cursor do mouse quando estiver sobre o form.
Enabled Determina se o form est habilitado, se estiver falso todos os controle hospedados tambm ficaro
desabilitados
Font Atribui a font padro para textos do form.
ForeColor Determina uma cor de primeiro plano padro, ser utilizada para todos controle caso no seja
atribuda separadamente.
Esse o primeiro form aberto ao executarmos um projeto, para alterar qual ser esse formulrio necessrio abrir o arquivo
program.cs e mudar a instncia de form passada para o mtodo Run([Instncia form]) da classe application . Se o form criado
junto com o projeto no tiver sido renomeado estar assim:
37 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Application.Run(new Form1());
Caso contrrio no lugar de Form1 estar o nome atual do Form que foi criado junto com o projeto. Altere para o nome do
formulrio que deseja que seja inicializado.
Prtica;
Crie 2 formulrios.
Controles containers
Os controles do tipo contineres foram concebidos para reunir uma srie de outros controles. Com eles possvel criar subdivises
lgicas e fsicas no form que agrupam outros controles. Por exemplo, voc pode colocar uma srie de opes correlatas dentro de
um groupbox onde somente uma pode ser escolhida. Quando um controle do tipo container hospeda outros controles, algumas
propriedades do mesmo podem impactar em todos os seus filhos, por exemplo, se a propriedade Enable for atribuda como false
todos os controles dentro do continer tambm ficaro desabilitados, assim como se a propriedade Visible for falsa, todos os itens
tambm ficaro invisveis.
Existem propriedades de layout dos itens que tem relao com seu container. Por exemplo, a propriedade Anchor presente em
todos os controles Windows Forms. Essa propriedade determina quais distncias entre as extremidades do controle item e seu
container sero mantidas quando o container for redimensionado. Observe as imagens abaixo para que esse conceito fique mais
claro.
O boto manter o seu posicionamento em relao ao seu canto superior direto. Ento vamos observar o que acontece quando
redimensionamos o groupbox:
O boto mantm a mesma distncia entre o seu canto superior esquerdo e o canto superior esquerdo do container. Agora vamos
mudar a propriedade Anchor do boto conforma imagem abaixo:
Ao redimensionarmos o grupo ser mantida a distncia entre o canto inferior direito do boto e o canto inferior direito do
container. Observe na imagem abaixo:
Execute esses mesmos passos no seu Visual Studio 2010 para ver tudo acontecendo, lembrando que o posicionamento do boto
no foi alterado manualmente em nenhum momento.
A propriedade Dock tambm est fortemente relacionada com o container pai do controle. Atravs dela voc pode manter um
controle fixado em uma das extremidades do container ou ainda preenchendo todo o espao do mesmo.
Exemplo:
Sendo assim o mesmo acompanhar qualquer redimensionamento ocorrido no container para que continue preenchendo toda sua
parte superior, observe na imagem abaixo:
GroupBox
Panel
FlowLayoutPanel
TableLayoutPanel
TabControl
SplitContainer
GroupBox
O GroupBox um controle container que aparece no form com um ttulo e rodeado por uma linha. Ele no prove barras de
rolagens diferindo do controle Panel. O uso mais comum do GroupBox para hospedar RadioButons que representam opes
exclusivas. Por exemplo, um GroupBox com ttulo Sexo, hospedando dois rdio buttons com os rtulos Masculino e
Feminino.
Propriedade Descrio
Text Representa o ttulo do GroupBox
Panel
O Panel cria uma subseo do form e pode hospedar outros controles. O mesmo pode ser visualmente indistinguvel do resto do
form, embora possa ser configurado para apresentar bordas ao seu redor. O Panel d suporte a barras de rolagem e estando a
propriedade AutoScroll com o valor true as mesmas apareceram de acordo com a necessidade.
40 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Propriedade Descrio
AutoScroll Indica se barras de rolagem apareceram automaticamente caso
algum controle contido no Panel estiver ultrapassando seus
limites.
BorderStyle Define se o Panel ser circundado por bordas e qual ser o
estilo das mesmas.
FlowLayoutPanel
O FlowLayoutPanel uma especificao do controle Panel e assim como ele serve para criao de uma subseo no formulrio,
porm a principal diferena entre eles que o FlowLayoutPanel reposiciona e redimensiona automaticamente os controles
adicionados em seus itens durante o design e a execuo, dessa forma ajusta-os em um fluxo continuo. Para que as barras de
rolagem apaream automaticamente a propriedade AutorScroll tambm deve ter o valor true. Por padro a direo do fluxo do
FlowLayoutPanel da direita para a esquerda e do topo para a base, mas isso pode ser alterado atravs da propriedade
FlowDirection. Uma nova linha criada sempre que o limite horizontal atingido isso se a propriedade WrapContent estiver
com o valor verdadeiro, porm voc pode fazer as quebras de linha manualmente setando esta mesma propriedade para falso e
utilizando o mtodo SetFlowBreak que recebe como parmetro o controle filho em que a quebra de linha acontece por exemplo:
flowLayoutPanel1.SetFlowBreak(btn, true);
Sendo flowLayoutPanel1 o nome do nosso FlowLayoutPanel e btn o nome de um boto hospedado por ele.
Propriedade Descrio
AutoScroll Indica se barras de rolagem apareceram automaticamente caso
algum controle contido no Panel estiver ultrapassando seus
limites.
BorderStyle Define se o Panel ser circundado por bordas e qual ser o
estilo das mesmas.
FlowDirection Define a ordem do fluxo dos componentes dentro do Panel
WrapContents Indica se as quebras de linha acontecem automaticamente
quando os componentes ultrapassam as extremidades do Panel
SetFlowBrake Mtodo, Seta manualmente em qual componente acontece a
quebra de linha.
GetFlowBrake Mtodo, Retorna se o componente tem uma quebra de linha
atribuda a ele.
TableLayoutPanel
Como o FlowLayoutPanel o TableLayoutPanel uma especializao da classe Panel . O TableLayoutPanel essencialmente uma
tabela que prov clulas que hospedam controles individualmente. Como os outros Panels possui suporte a barras de rolagem
automaticamente quando a propriedade AutoScroll est com valor verdadeiro. Durante o Design basta voc arrastar os controles
para as clulas para inclui-los na tabela. Somente um controle permitido por clula, porm para designs mais complexo voc
pode colocar um container na mesma e dentro do dele incluir outros elementos.
Voc pode editar as linhas e as colunas da tabela atravs das propriedades Rows e Columns respectivamente.
Propriedade Descrio
AutoScroll Indica se barras de rolagem apareceram automaticamente caso
algum controle contido no Panel estiver ultrapassando seus
limites.
CellBordeStyle Define se as clulas sero circundadas por bordas e qual ser o
estilo das mesmas.
Column Count Define a quantidade colunas na tabela
Columns Apresenta uma coleo editvel das colunas da tabela, onde
41 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
TabControl
O TabControl permite que voc agrupe controles em abas, o TabControl funciona com um container de tabPages, sendo que cada
uma dela pode ter seus prprio controle filhos. O usurio navega entre as pginas clicando nas abas rotuladas do TabControl. A
propriedade mais importante do TabControl a TabPages. Cada TabPages tem sua prpria gama de propriedades voc pode
acessa-las assim como em qualquer outro controle selecionando-as e acessando a janela properties. Para gerenciar as TabPages de
um TabControl basta acessar a propriedade TabPages que o gerenciador abaixo ser aberto:
Nele voc pode adicionar ou remover TabPages assim como ordena-los e alterar suas propriedades sendo que as principais delas
so Text que representa o ttulo da aba, AutoScroll que funciona da mesma forma que nos Panels e BorderStyle que indica se ter
uma borda circundando e qual o estilo da mesma.
42 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Propriedade Descrio
Appereance Propriedade do TabControl; Determina o estilo visual do
TabControl.
Alignment Determina se as abas aparecero em cima, em baixo, direito
ou esquerda do TabControl.
Multline Propriedade do TabControl; Indica se mais uma linha de abas
pode existir na TabControl.
TabPages Propriedade do TabControl; Coleo das TabPages, voc pode
edita-las nessa propriedade.
AutoScroll Propriedade da TablePage; Indica quando as barras de rolagem
aparecem automaticamente de acordo com a necessidade.
BorderStyle Propriedade da TablePage; Determina se a aba ser circundada
por borda e qual ser o estilo da mesma.
Text Propriedade da TablePage; Representa o ttulo da aba.
SplitContainer
O SplitContainer cria uma subseo do form onde h dois Panel separados por um divisor que pode ser movido em tempo de
execuo pelo usurio. Quando o tamanho de um Panel diminui o outro aumenta para preencher o espao. O uso mais comum
desse componente na criao de Windows forms divididos. O SplitContainer expes as propriedade do Panel1 e Panel2,
individualmente ambos so iguais um Panel normal, porm o SplitContainer tem suas propriedades especficas. A orientao de
um SplitContainer pode ser horizontal e vertical para alterar isso utilize a propriedade orientation.
Propriedade Descrio
BorderStyle Determina se o SplitterContainer ser circundada por borda e
se sim, qual ser o estilo da mesma.
Fixed Panel Essa propriedade indica qual Panel do SplitContainer ser
fixado no tamanho essa propriedade assume os valores Panel1,
Panel2 e none.
IsSplitterFixed Determina se a posio do divisor poder ser reajustada pelo
usurio em tempo de execuo.
Orientation Determina se o divisor se movimentar horizontalmente ou
verticalmente.
Panel1 Expes as propriedades do primeiro Painel do SplitContainer
Panel2Collapsed Retorna se o segundo painel do SplitContainer est recolhido.
Panel2MinSize Determina o tamanho mnimo que o segundo painel do
SplitContainer pode assumir.
SplitterDistance Representa a distancia do divisor em relao extremidade
esquerda ou da extremidade superior dependendo da orientao
SplitterWidth Representa a largura do divisor.
Controles so componentes que combinam interface grfica com funcionalidade pr-estabelecidas. So unidade de cdigo
concebidas para atender uma grande gama de tarefas particulares. Por Exemplo, o controle TextBox tem por objetivo exibir texto
e receber entrada de dados na forma texto do usurio, ele prov propriedades, mtodos e eventos que facilitam essa tarefa. Todos
os controles tem a classe base Control como ancestral comum a qual compartilha uma sria de propriedade em relao a
tamanho, localizao e outros aspectos gerais dos controles.
A tabela abaixo demonstra as principais propriedades da classe Control, s quais so comuns a todos os controles Windows
Forms.
Propriedade Descrio
Anchor Determina como o controle fica amarrado ao container que foi adicionado.
BackColor Determina a cor de fundo do controle.
43 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
BackgroundImage Determina uma imagem para servir com plano de fundo do controle.
Indica quando o controle executa mtodos de validaes, esses mtodos servem para verificar
CausesValidation se a entrada de dados do usurio est de acordo com as regras de negcio.
ContainsFocus Indica quando o foco esta no prprio controle ou um em dos seus filhos.
Controls Retorna uma coleo dos controles filhos.
Cursor Determina o aspecto do cursor quando o mouse passar sobre o controle.
Determina se o controle est fixado em uma das extremidades do container pai ou preenchendo
Dock o mesmo.
Enabled Determina se o controle est habilitado e funcional.
Font Determina a fonte que ser utilizada para escrever eventuais textos do controle.
ForeColor Determina a cor do primeiro plano do controle, borda, textos entre outros.
HasChildren Determina se o controle possui controles filhos.
Height Representa a altura do controle em pixels.
Location Representa a localizao do controle em relao ao container.
MaximumSize Representa o tamanho mximo que o controle pode assumir.
MinimumSize Representa o tamanho mnimo que o controle pode assumir.
Atribui um nome ao controle para ser acessvel via cdigo, s pode ser atribuda durante o
Name design.
Parent Retorna o form pai ou o container que o controle est contido.
Region Atribui ou retorna a regio Windows associada com o controle.
Size Representa o tamanho do controle em pixel.
Representa a ordem de precedncia do controle quando a tecla Tab for utilizada para navegar
TabIndex controle a controle.
Tag Serve para o programador associar algum dado ao controle para auxilia-lo na programao.
Atribui ou retorna o texto associado com o controle, o texto pode ou no aparecer na
Text representao visual do controle depende de como o mesmo foi definido.
Atribui ou retorna a visibilidade do controle quando estiver como false o controle s aparece
Visible durante o design estando invisvel na execuo.
Width Atribui ou retorna a largura do controle em pixels.
Button
Um dos controles mais comuns o Button, o controle essencial que prov interao de comando entre o usurio e a interface
grfica. O boto pode exibir um texto curto a fim de identifica-lo e responder a clicks efetuados pelo usurio. O boto assume um
visual diferenciado quando clicado e fornece um manipulador de evento para que o desenvolvedor escreva o cdigo desejado. O
controle Button expe uma srie de propriedade que permite que voc customize a aparncia e o comportamento do mesmo. A
tabela abaixo demonstra as principais Propriedades de um boto.
Propriedade Descrio
AutoEllipsis Habilita a manipulao automtica textos que excedam a largura do boto.
DialogResult Atribui um DialogResult ao boto, exemplo: DialogResult.Ok, DialogResult.Cancel.
FlatAppearance Determina como o boto parecer quando a propriedade FlatStyle estiver com valor verdadeiro
Quando o valor est verdadeiro o padro deixa de acompanhar a aparncia padro do Windows
FlatStyle e passa a respeitar o que desenvolvedor define no FlatAppearance
Text Atribui o texto que aparece no boto.
TextAlign Determina como o texto apresentado no boto.
Interceptando um clique: Para escrever o cdigo que ser executado quando o clique do boto ocorrer voc pode clicar duas vezes
sobre o boto durante o design e o cdigo da janela abrir com um mtodo cujo nome formado por:
[nome do boto]_Click
Basta escrever a implementao do mtodo entre as chaves que delimitam seu escopo.
44 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Outra maneira de fazer a mesma coisa acessar a lista de eventos na aba properties, clicando no cone de um pequeno raio e
dando um duplo clique sobre o evento click, especificado na lista de eventos que aparecer conforme imagem abaixo.
Exemplo
1. Crie um novo projeto Windows Forms, arraste um controle Button da ToolBox para o formulrio padro.
2. Altere o valor da propriedade Name para btnMudaCor.
3. Altere o valor da propriedade Text para Mudar cor de fundo.
4. Abra a lista de eventos do boto e d um duplo click no evento Click.
5. Dentro do mtodo criado no segmento de cdigo com o nome btnMudaCor_Click coloque o cdigo abaixo.
//A classe random serve para gerao de nmero aleatrio,
//nesse caso utilizaremos para criar uma cor passando a quantidade de
vermelho,azul e vermelho que a compes aleatriamente
Random rn =new Random();
//A palavra this se refere a prpria classe onde o mtodo esta definido como no
caso form.
//Estamos mudando a cor de fundo do mesmo.
//A classe Color so abstraes de cores no .net framework, podem criar um cor
pelo mtodo RGB conforme abaixo.
//O mtodo Next da classe Random gera o nmero aleatrio pegamos o resto da
diviso deste nmero por 255.
//Pois assim nunca ultrapassar o valor mximo que o parmetro aceita.
this.BackColor = Color.FromArgb(rn.Next() % 255, rn.Next() % 255, rn.Next() %
255);
6. Aperte F5 para roda a aplicao.
TextBox
TextBox o principal controle utilizado para recebimento de entrada de dados do usurio na forma textual . Ele fornece a
possibilidade de receber e exibir texto para usurio. Voc pode criar caixas de texto que mostram texto em mltiplas linhas, voc
pode tambm criar caixas de texto que aceitam a entrada de senhas e omitem o contedo apresentando apenas um caractere
escolhido pelo desenvolvedor, por exemplo, um *. As principais propriedades do mesmo esto expostas na tabela abaixo:
45 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Propriedade Descrio
Hospeda uma coleo de strings utilizadas para Auto Complemento quando
AutoCompleteMode estiver com valor diferente de none e o
AutoCompleteCustomSource AutoCompleteSource estiver com valor custom.
AutoCompleteMode Atribui a forma do auto completar, os possveis valores so: Normal,Upper e Lower
Determina a fonte de dados utilizada para realizar o auto complemento, pode ser uma
srie de fontes de dados preestabelecidas pelo sistema ou uma customizada definida
AutoCompleteSource pelo desenvolvedor.
Determina a forma como os caracteres ficaro na caixa de texto, os valores so:Upper-
Todos em maisculo, Lower-Todos em minsculo e Normal-Permanece como o
CharacterCasing usurio digitar.
Representa uma coleo de strings que refletem o valor da caixa de texto separado em
Lines linhas, s significante quando a propriedade MuliLine estiver com valor verdadeiro.
MaxLength Determina o nmero mximo de caracteres que o TextBox pode aceitar.
MultiLine Determina se a caixa de texto aceita o caractere de quebra de linha.
Quando um caractere definido nesse campo, todo caractere digitado pelo usurio
substitudo pelo mesmo na apresentao, porm via cdigo o valor da propriedade
PasswordChar Text traz a string real digitada. Amplamente utilizado para senhas.
Determina quando uma caixa de texto no pode ter seu texto editado servindo apenas
para apresentao, o foco ainda passa no campo e o usurio pode copiar o texto
ReadOnly atravs da seleo do mesmo.
Indica se barras de rolagem aparecero na caixa de texto caso mltiplas linhas forem
ScrollBars aceitas.
Text Uma string representando o texto contido na caixa de texto.
Determina se o texto atual deve ser substitudo pelo caractere de senha padro do
UseSystemPasswordChar sistema na exibio.
Indica quando as palavras so automaticamente direcionadas para outra linha quando
ultrapassam a largura do textbox e a propriedade multiline estiver com o valor
WordWrap verdadeiro.
Exemplo
1. Crie um novo projeto Windows Forms, arraste um controle TextBox da ToolBox para o formulrio padro.
2. Altere a propriedade Name do TextBox para txtMensagem.
3. Arraste um controle Button da ToolBox para o formulrio padro.
4. Altere a propriedade Name do Button para btnExibir e a propriedade Text para Exibir.
5. Crie uma varivel do tipo string no formulrio chamada Mensagem e inicialize-a. Cdigo abaixo:
string Mensagem= string.empty;
6. Agora volte para o editor visual do form e selecione o TextBox, v at a janela de propriedade e acesse a lista de eventos,
d um duplo clique no evento TextChanged.
7. No mtodo criado no cdigo do form com o nome txtMensagem_TextChanged escreva o cdigo abaixo:
Mensagem = txtMensagem.Text;
8. Agora acesse a lista de eventos do boto e d um duplo clique do evento Click, no mtodo criado no cdigo do form
coloque o cdigo abaixo:
MessageBox.Show(Mensagem);
9. Rode o programa, altere o texto do TextBox e veja que o texto da caixa de dialogo aberta ao clicar do boto estar
sempre igual ao da caixa de texto.
Label
O label o principal controle utilizado para apresentao de textos no editveis na tela, largamente utilizado para identificar
outros componentes. As suas principais propriedades so a Text que representa o texto que ser apresentado por ele e TextAlign
que representa como o texto ser apresentado.
46 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
CheckBox
O CheckBox um controle muito familiar aos usurios. Ele permite que o usurio marque uma caixa combinada com um texto,
que indica concordncia ou rejeio da opo apresentada. Os CheckBoxes diferem dos RadioButtons uma vez que no trabalham
de forma exclusiva ou seja a escolha de uma opo no rejeita as demais.
Propriedade Descrio
Determina se o CheckBox ser
automaticamente marcado
quando o usurio clicar no texto
AutoCheck que o identifica.
Determina se o CheckBox est
Checked marcado
Determina o estado da marcao
do CheckBox,
Indeterminate,Checked ou
CheckState UnChecked
Representa o texto que identifica
Text o CheckBox para o usurio
Determina se o CheckBox aceita
ThreeState dois ou trs estado de marcao.
Exemplo
1)Crie um novo projeto Windows Forms, arraste da ToolBox um Label para o formulrio padro.
3)Arraste 4 CheckBoxes para o formulrio e altere as propriedades dos mesmos conforme a tabela abaixo:
4)Arraste um boto para o formulrio coloque o valor da propriedade name para btnMostraEscolha e a Text para Mostrar
Escolha.
6)Crie uma varivel na classe do tipo List<string> chamada ingredientes e inicialize-a sintaxe abaixo.
List<string> Ingredientes;
7)Agora v at a lista de eventos de cada um dos CheckBoxes e d um duplo clique no evento CheckedChanged.
8)Agora implemente a definio de cada um dos mtodos criados de acordo com a tabela abaixo;
Mtodo Definio
chkCarneSeca_CheckedChanged if (chkCarneSeca.Checked) {
if(!Ingredientes.Contains(chkCarneSeca.Text))
{
Ingredientes.Add(chkCarneSeca.Text);
}
}
else {
Ingredientes.Remove(chkCarneSeca.Text);
}
chkBacon_CheckedChanged if (chkBacon.Checked)
{
if
(!Ingredientes.Contains(chkBacon.Text))
{
Ingredientes.Add(chkBacon.Text);
}
}
else
{
Ingredientes.Remove(chkBacon.Text);
}
chkCatupiry_CheckedChanged if (chkCatupiry.Checked)
{
if
(!Ingredientes.Contains(chkCatupiry.Text))
{
Ingredientes.Add(chkCatupiry.Text);
}
}
else
{
Ingredientes.Remove(chkCatupiry.Text);
}
chkPalmito_CheckedChanged if (chkPalmito.Checked)
{
if
(!Ingredientes.Contains(chkPalmito.Text))
{
Ingredientes.Add(chkPalmito.Text);
}
}
else
{
Ingredientes.Remove(chkPalmito.Text);
}
48 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
9) Agora acesse a lista de eventos do btnMostraEscolha, e d um duplo clique sobre o evento Click, coloque o cdigo abaixo em
sua definio.
Radio Button
O RadioButton utilizado para representar uma opo exclusiva para o usurio. Abaixo um exemplo simples com um GroupBox
com o ttulo sexo e o usurio pode escolher entre masculino e feminino mas nunca ambos.
Propriedade Descrio
Indica se o Radio button esta
Checked marcado.
Representa o texto que identifica
Text a opo par ao usurio.
Exemplo
2)Arraste um GroupBox para o formulrio e mude a propriedade Name para grpBorda e a propriedade Text para borda.
3)Arraste 2 RadioButtons para dentro do GroupBox. Altere as propriedades de ambos conforme a tabela abaixo.
rdbMussarela_CheckedChanged if (rdbMussarela.Checked)
borda = rdbMussarela.Text;
49 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Masked TextBox
O MaskedTextBox um TextBox modificado que permite a definio de um padro para aceitar ou rejeitar uma entrada de dados
do usurio. A propriedade Mask fornece a possibilidade de especificar os caracteres opcionais e obrigatrios, especificar tambm
quais caracteres so letras ou nmeros e aplicar uma formatao para exibio de string. A tabela abaixo mostra as principais
propriedades do MaskedTextBox:
Propriedade Descrio
AllowPromptAsInput Determina se o caractere utilizado como prompt aceito como entrada de dados
Determina se somente caracteres da tabela AscII sero aceitos como entrada de
AsciiOnly dados
Determina se um sinal sonoro ser emitido quando o usurio digitar um caractere
BeepOnError invlido para a posio da mscara.
Determina quais os caracteres sero movido para o ClipBoard quando o texto for
CutCopyMaskFormat recortado ou copiado.
Determina se os caracteres prompt sero omitidos quando o foco sair do
HidePromptOnLeave MaskedTextBox
InsertKeyMode Atribui ou retorna a forma de insero.
Mask Determina a mscara de entrada de dados.
PromptChar Determina o caractere para prompt, ou seja, posies editveis da mscara.
Determina se a entrada de dados ser interrompida ao primeiro caractere invlido
RejectInputOnFirstFailure digitado pelo usurio.
Determina se a entrada de dados ser interrompida quando o usurio digitar um
ResetOnPrompt caractere utilizado com prompt.
Determina se a entrada de dados ser interrompida quando o usurio digita um
ResetOnSpace espao.
Determina como a propriedade Text ser retorna, somente com os caracteres literais,
incluindo os caracteres de formatao, ou includo os caracteres de formatao e os
TextMaskFormat caracteres prompt.
A Propriedade Mask
A propriedade mais importante de um MaskedTextBox a propriedade Mask, a qual habilita a definio de uma string que
representa o formato requerido para entrada de dados do usurios. Abaixo os caracteres chaves que podem ser utilizados para
criao de uma mscara e seus significados nesse contexto.
Exemplo
1)Crie um novo projeto Windows Forms, arraste um controle MaskedTextBox da ToolBox para o formulrio padro.
4)Altere a propriedade Name do Button para btnExibir e a propriedade Text para Exibir.
6)Crie uma varivel do tipo string no formulrio chamada Mensagem e inicialize-a. Cdigo abaixo:
51 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
MessageBox.Show(Mensagem);
10)Rode o programa, altere a propriedade TextMaskFormat do MaskedTextBox para cada um dos valores possveis e veja o que
acontece quando o dialogo com a mensagem exibida, faa a mesma coisa para a CutCopyMaskFormat e copie cole em um editor
de texto o contedo do MaskedTextBox, veja as diferenas.
Com o .net Framework j temos disponvel implementaes para realizar as operaes mais comuns com arquivos, essas
implementaes esto no namespace System.IO.O namespace System.IO contm tipos que permitem leitura e escrita em arquivos
e streams de dados e tipo que fornecem as funcionalidades bsica de suporte a diretrios e arquivos.
Tabela com as classes que vamos utilizar nesse tpico e uma descrio sobre suas funcionalidades.
Classe Descrio
File Fornece mtodos estticos para criao, cpia, deleo,
movimentao e abertura de arquivos.
Criar um arquivo
Para criar um arquivo podemos utilizar o mtodo esttico Create da classe File que recebe como parmetro uma string indicando o
caminho onde o arquivo ser criado. Sintaxe:
File.Create("C:\\MyText.txt");
Ateno se um arquivo com mesmo nome j existir no mesmo local o mesmo ser sobrescrito por um arquivo em branco.
Escrever em um arquivo
Para escrever em um arquivo texto precisamos de uma instancia da classe FileStream a maneira mais fcil de se fazer isso
passando o caminho do arquivo como parmetro e tambm o FileMode OpenOrCreate que cria o arquivo se no existir e abre ele
no modo adio se existir ou seja no apaga os dados e acrescenta o que escrevermos.
Feito isso podemos usar a classe StreamWritter que facilita na hora de escrever no arquivo, uma instncia tambm precisa ser
criada, como parmetro passamos a instncia da classe FileStream que criamos acima com o nome fs fica assim o cdigo:
StreamWriter St=new StreamWriter(fs);
Agora podemos usar os mtodos Write e WriteLine passando o texto que ser escrito, a diferena entre os dois que o segundo j
adiciona uma quebra de linha ao acabar de escrever o texto passado como parmetro veremos um exemplo utilizando cada um dos
mtodos.
52 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
/*
No arquivo ficaria assim
*
* Qualquer texto pode ser escrito aqui. Qualquer texto pode ser escrito aqui.
*
*/
Ler de um arquivo
A primeira parte continua igual criar uma instncia do FileStream no mode OpenOrCreate.
/*
No mtodo Read necessrio passar como parmetro um array de char que ser populado
com os caracteres lido
* os outros 2 parmetros so posio inicial da leitura em ndice e a quantidade de
caracteres a serem lidos.
*/
char[] buffer=new char[20];
sr.Read(buffer, 0, 20);
/*
O ReadLine l uma linha de cada vez e retorna os caracteres,
* em uma string, mas antes necessrio verificar se a string no chegou ao fim.
*/
string str;
if(!sr.EndOfStream)
str = sr.ReadLine();
Apagar um arquivo
File.Delete("C\\MyText.txt");
53 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Crie uma tela de cadastro de clientes com os campos: cdigo, nome e documento.
Quando ele digitar um cdigo j existente tem que recuperar os dados do cliente.
Modificadores de acesso.
Os modificadores de acessos so palavras reservadas utilizadas para definir a acessibilidade de um membro. Existem quatro deles:
public
protected
internal
private
Os modificadores de visibilidade podem acompanhar: Classes, Mtodos, Atributos, Propriedades, Interface, Enums e construtores.
Ateno, quando nenhum modificador definido considerado o mais restritivo, ou seja, private.
Classes
Uma classe uma unidade lgica que rene as propriedades, ou seja, as caractersticas sobre ela mesma e as suas aes
representadas pelos mtodos que sero abordados com maior profundidade nesse captulo. Uma classe descreve os servios
providos por seus objetos e quais informaes eles podem armazenar. Em C# todas as aes so baseadas em classes de maneira
que no podemos definir um mtodo fora do escopo de uma classe. Uma declarao de classe ou estrutura como um desenho
que usado para criar instncias ou objetos em tempo de execuo. Se voc definir uma classe ou estrutura chamada Pessoa,
Pessoa o nome do tipo. Se voc declara e inicializa uma varivel p tipo Pessoa, p considerado um objeto ou instncia de
Pessoa. Uma classe pode ter basicamente construtores, propriedade e mtodos, cada um desses itens ser abordado separadamente
sem seguida.
Propriedades e variveis
Propriedades e variveis da classe so dados armazenados pela classe e a diferena entre ambas que as variveis normalmente
so utilizadas para processamentos internos da classe enquanto as propriedades so utilizadas para expor suas caractersticas
outros objetos, em C# entendido como propriedade dados que faam uso de getters e setters para que outros objetos acessem
suas informaes, uma varivel com modificador pblico no considerada uma propriedade, pois os outros objetos tem acesso
direta a mesma e isso no desejvel. J com getter e setter por mais que aparentemente o acesso direto o valor passa por um
tratamento antes
.
A sintaxe bsica de uma propriedade :
//O get significa que outros objetos podero visualizar o valor da propriedade
get;
//O set significa que outros objetos podero atribuir o valor da propriedade
54 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
set;
}
Exemplo de propriedade
public string Nome
{
get;
set;
}
Exemplos
class Pessoa {
//Propriedade com get e set, outros objetos podem atribuir e visualizar seu valor.
public string Nome
{
get;
set;
}
string _Nome;
/*O valor recebido em uma varivel pode ser tratado assim como o valor retornado expandido
os modificadores get e set.
Normalmente quando precisamos fazer algum tipo de tratamento criamos uma varivel
privada e encapsulamos em uma propriedade
* quando o valor atribudo ou solicitado fazemos as modificaes necessrias antes e
dentro da classe utilizamos a varivel privada.
*/
public string NomeTratado {
get {
return _nome.ToUpper();
}
set {
//O value assume o valor atribudo a vriavel, e tambm o tipo da mesma
_nome = value.ToLower();
}
}
Construtores
Construtor uma espcie de mtodos especial que no precisa ser invocados explicitamente, pois isso ocorre quando realizamos a
criao de um objeto do tipo da classe, eles devem ter o mesmo nome da classe, no possuir um tipo de retorno definido, uma
mesma classe pode ter vrios construtores, com tanto que cada um receba parmetros diferentes, os construtores so amplamente
utilizados para inicializao das propriedades e variveis da classe. A sintaxe bsica de um construtor :
55 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Exemplo:
class Pessoa {
string _nome;
string _cpf;
/*
Esse terceiro construtor inicia a vriavel Cpf e repassa a tarefa de iniciar a vriavel
nome
* ao construtor que j sabe como fazer isso, dessa forma evitamos duplicar um cdigo que
faz a mesma coisa.
* Nesse caso o que acontece, o terceiro construtor chama o segundo que chama o primeiro,
ento primeiro as variveis
* so atribudas para valor vazio, depois a vriavel nome atribuda e por ltimo a
vriavel _cpf atribuda.
*/
public Pessoa(string Nome, string Cpf):this(Nome) {
this._cpf = Cpf;
}
}
class Program
{
static void Main(string[] args)
{
//Declarao de uma vriavel pessoa.
56 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Pessoa pess;
Console.ReadKey();
}
static void MostraNomeCpf(string nome, string cpf) {
if(nome==string.Empty)
nome="Vazio";
if(cpf==string.Empty)
cpf="Vazio";
Console.WriteLine("Nome:{0}; CPF:{1}", nome, cpf);
}
}
Mtodos
Um mtodo um bloco de cdigo que contm uma srie de instrues. O programa executa as instrues quando chamamos o
mtodo e especificamos argumentos, em C# todas as instrues so executadas por mtodos. O mtodo Main o ponto de entrada
para cada aplicativo C# e ele chamado pelo CLR (Common Language Runtime) quando o programa iniciado.
Assinatura de mtodos
Mtodos so declarados em uma classe ou struct, especificando-se o nvel de acesso como public ou private, modificadores
opcionais como abstract ou sealed, o valor de retorno e o nome do mtodo. Essas partes juntos so o assinatura do mtodo.
Observao:
Um tipo de retorno de um mtodo no parte da assinatura do mesmo para fins de sobrecarga. No entanto, ele parte da
assinatura do mtodo ao determinar a compatibilidade entre um delegate e o mtodo que ele aponta.
Os parmetros do mtodo so colocados entre parnteses e so separados por vrgulas. Parnteses vazios indicam que o mtodo
no requer parmetros.
Sintaxe do mtodo:
Parmetros
Os parmetros so valores que o mtodo necessita para realizar suas operaes, ao declarar o mtodo devem ser especificados
entre os parnteses com o tipo explicito.
Exemplo:
//O mtodo abaixo aceita um inteiro e uma string como parmetros, que necessariamente precisam ser
passados na chamada.
public void ExcutaAcao(int inteiro, string texto) {
}
57 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
A maneira mais comum de passar os parmetros na chamada como no cdigo abaixo, respeitando a ordem em que foram
definidos.
pess.ExcutaAcao(1, "a");
Mas em C# os parmetros podem ser passados fora de ordem, porm dessa manei precisa ser especificado o nome do parmetro
seguido do valor desejado, exemplo:
pess.ExcutaAcao(texto: "a", inteiro: 1);
Retorno
O retorno do mtodo o tipo de dado que o mesmo devolve ao terminar seu processamento, quando definimos um tipo de retorno
no mtodo o compilador exige um cdigo que garanta o retorno de dados com tipo compatvel, a palavra reservada void
utilizada em mtodos que no precisam retornar nenhuma informao. A palavra chave para retorno de dados return a
execuo do mtodo interrompida quando a execuo passar por um return.
Exemplos
//Esse mtodo no retorna nenhuma informao chamada
public void ExcutaAcao(int inteiro, string texto) {
//Definio
}
//Esse mtodo retorna uma string concatenando os dois parmetros
public string ExcutaAcao(int inteiro, string texto)
{
return texto + inteiro.ToString();
}
Sobrecarga
Sobrecarga de mtodo a possibilidade de termos mtodos diferentes com o mesmo nome diferindo apenas em seus parmetros,
Isso possvel porque o mtodo identificado na chamada no s pelo seu nome, mas tambm pelos argumentos recebidos. Esse
recurso nos ajuda a manter a semntica do cdigo.
Exemplo
class Pessoa2 {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Pessoa2().FormataDados("Vinicius"));
//Sada = Nome:Vinicius
Exemplo
//Nesse caso se o cpf no for especificado na chamada.
//O nome ser exibido e no lugar do Cpf a palavra "Vazio" aparecer.
public string FormataDados(string Nome, string Cpf="") {
if (Cpf == "")
Cpf = "Vazio";
return "Nome:" + Nome + " Cpf:" + Cpf;
}
58 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Console.WriteLine("Classe");
pess.ExibeDados();
//Saida = Nome:Nome escopo classe Cpf:Cpf escopo classe
Console.WriteLine("Mtodo");
AlteraPessoa(pess);
//Saida = Nome:Nome escopo mtodo Cpf:Cpf escopo mtodo
Console.WriteLine("Classe");
pess.ExibeDados();
//Saida = Nome:Nome escopo classe Cpf:Cpf escopo classe
Console.WriteLine("Mtodo");
AlteraPessoa(ref pess);
//Saida = Nome:Nome escopo mtodo Cpf:Cpf escopo mtodo
Console.WriteLine("Classe");
pess.ExibeDados();
//Saida = Nome:Nome escopo mtodo Cpf:Cpf escopo mtodo
//Parmetro de sada
int val;
if (StringToInt("1",out val))
Console.WriteLine("Converso bem sucedida valor={0}", val);
else
Console.WriteLine("Converso falhou");
Console.ReadKey();
}
static void AlteraPessoa(PessoaSimp pess) {
pess = new PessoaSimp();
pess.Nome = "Nome escopo mtodo";
pess.CPF = "Cpf escopo mtodo";
pess.ExibeDados();
}
static void AlteraPessoa(ref PessoaSimp pess) {
pess = new PessoaSimp();
pess.Nome = "Nome escopo mtodo";
pess.CPF = "Cpf escopo mtodo";
pess.ExibeDados();
}
59 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Enums
A palavra-chave enum usada para declarar uma enumerao, um tipo distinto que consiste em um conjunto de constantes
nomeadas denominada lista de enumerador. Geralmente melhor definir um enum dentro de um namespace para que todas as
classes no namespace possam acess-lo com igual convenincia. No entanto, um enum tambm pode ser aninhado dentro de uma
classe ou struct. As constantes tm um valor numrico relacionado. Por padro iniciando em 0 e aumentando em 1 a cada uma.
Mas esse valor tambm pode ser atribudo explicitamente.
Enumeradores podem usar os inicializadores para substituir os valores padres, conforme mostrado no exemplo a seguir.
Utilizando um enum
enum DiasDaSemana {
Segunda,
Tera,
Quarta,
Quinta,
Sexta
}
Herana
A herana, juntamente com o encapsulamento, polimorfismo e abstrao, uma das quatro principais caractersticas (ou pilares)
da programao orientada a objeto. A herana permite que voc crie novas classes para reutilizar, estender e modificar o
comportamento que est definido nas outras classes. A classe cujos membros so herdados chamada de classe base, e a classe
que herda a esses membros chamada de classe derivada. Uma classe derivada pode ter apenas uma classe base direta. No
entanto, a herana transitiva se ClassC derivada da ClassB e ClassB derivada da ClassA, ClassC herda os membros
declarados em ClassB e ClassA.
60 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Conceitualmente, uma classe derivada uma especializao da classe base. Por exemplo, se voc tiver uma classe base Animal,
voc pode ter uma classe derivada que denominada Mamferos e outra classe derivada que denominada Rpteis. Tanto os
mamferos quanto rpteis so animais, mas cada classe derivada representa especializaes diferentes da classe base.
Quando voc definir uma classe para derivar de outra classe, a classe derivada implicitamente obtm todos os membros da classe
base, exceto para os construtores e destrutores. A classe derivada, assim, pode reutilizar o cdigo da classe base sem ter que
rescrever. Na classe derivada, voc pode adicionar mais membros. Dessa forma, a classe derivada estende a funcionalidade da
classe base.
Em C# para que uma classe herde de outra deve ser adicionado aps o nome da mesma : seguido do nome da classe base.
Exemplo abaixo.
class Animais
{
//Definio
}
Uma classe esttica pode ser usada como um recipiente conveniente para conjuntos de mtodos que s operam nos parmetros de
entrada e no precisar obter ou definir quaisquer campos internos de instncia. Por exemplo, a biblioteca de classes do .NET
Framework contm a classe esttica System.Math que contm mtodos que executam operaes matemticas, sem a necessidade
de armazenar ou recuperar dados exclusivos de uma determinada instncia da classe Math. Ou seja, basta utilizar os membros da
classe especificando o nome da classe e o nome do mtodo, conforme mostrado no exemplo a seguir.
Console.WriteLine(Math.Abs(dub));
Console.WriteLine(Math.Floor(dub));
Console.WriteLine(Math.Round(Math.Abs(dub)));
// Output:
// 3.14
// -4
// 3
Uma classe esttica no pode conter variveis de instancia nem mtodos no estticos. Sintaxe para declarao de uma classe
esttica.
Exemplo:
public static class Matematica {
//Definio
}
61 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Uma classe no esttica tambm pode conter mtodos estticos contanto que no acessem variveis de instancia nem mtodo no
estticos. A sintaxe para criao de um mtodo esttico a mesma de um mtodo no esttico a diferena a adio da palavra-
chave static antes do tipo de retorno do mtodo. Exemplo abaixo:
public static int Soma(int n1,int n2){
//Definio
}
Converses
Em C# com algumas excees todas as converses devem ser explicitas. Quase todos os tipo elementares oferecem mtodos para
converso o Parse e o TryParse. Vamos realizar converses para os tipos mais comuns.
Exemplo
object val = 1;
int intval = (int)val;
Interfaces
A interface uma espcie de contrato sobre as funcionalidades que os objetos que derivados dela devem ter. Ela no apresenta a
implementao das funcionalidades apenas as assinaturas, mas garante que as classe derivadas as implementaro. A sintaxe para
criao de interfaces a seguinte:
Exemplo
public interface IAnimais {
void Repirar();
string GetNome();
void SetNome(string Nome);
}
Classe derivada
public class Mamiferos : IAnimais {
ADO.net
O ADO.net um conjunto de classe voltadas ao acesso de dados, ele fornece cdigos consistente de acesso aos dados em fontes
como o Microsoft SQL Server e XML, bem como a fontes de dados expostas atravs de OLE DB e ODBC. Aplicaes cliente
pode utilizar o ADO.NET para conectar-se a essas fontes de dados e recuperar, manipular e atualizar os dados que elas contm.
O ADO.net contm objetos bases sobre os quais implementaes especficas para cada SGDB so feitas. Abaixo as classes que
utilizaremos para acessar dados nos exemplos da apostila.
Objeto Descrio
DbConnection Encapsula uma conexo com banco de dados
DbCommand Encapsula um comando SQL
DataTable Representa um conjunto de dados em formato tabular.
DbDataAdapter Executa comandos e preenche dados.
DbParameter Encapsula um parmetro de instruo SQL
No cdigo acima criamos a conexo, porm s saberemos se est funcionamos quando tentarmos abrir a mesma atravs do
mtodo Open ou executar um comando com DataAdapter.
Conn.Open();
63 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
GetConnection().Open();
Mensagem = "Conectado com sucesso";
}
catch (Exception e)
{
Mensagem = e.Message;
return Mensagem;
}
nome = dt.Rows[i]["nome"].ToString(),
DataPrimeiraCompra =
DateTime.Parse(dt.Rows[i]["data_ult_compra"].ToString())
};
//Adiciona na lista de cliente perceba que a vriavel a mesma, mas a cada
iterao criada uma nova instncia.
lst.Add(cli);
}
return lst;
}
}
Executando comandos diferentes de consulta
Para executar outros comandos que no sejam consultas, como inserts,deletes e updates, o processo o mesmo que executar uma
query as nicas diferenas que no vamos utilizar um DataAdpter e executaremos o comando atravs do mtodo da classe
DbCommand ExecuteNonQuery(). Veja abaixo um exemplo.
DbConnection Conn = new SqlConnection();
DbCommand Cmd = new SqlCommand("delete from clientes",(SqlConnection)Conn);
Cmd.CommandType = CommandType.Text;
Parameters.Add([SqlParameter]);
Parameters.Add([Nome do parmetro(string),[SqlDbType(enum)]);
Parameters.Add([Nome do parmetro(string),[SqlDbType(enum)],[Tamanho (para tipos que se aplica)]);
Parameters.Add([Nome do parmetro(string),[SqlDbType(enum)],[Tamanho (para tipos que se aplica)],[Coluna utilizada
como fonte de dados]);
Para especificarmos o valor dos parmetros acessamos a propriedade Value, pode ser diretamente ao utilizar o mtodo Add sem
necessidade de criar um objeto SqlParameter antes.
Exemplo:
cmd2.ExecuteNonQuery();
Controle composto.
1- Em um projeto Windows Forms adicione um User Control.
2- Mude o nome para Cronometro e clique em Add.
3- Um painel que representa a rea do controle aparecer.
4- Arraste um label e um boto para o mesmo.
5- Renomeie o label para lblSegundo e coloque propriedade Text com o valor 0.
6- Renomeie o boto para btnIniciar e mude o texto para Iniciar.
7- Deixe o layout do controle parecido com a imagem abaixo:
8-
9- Arraste um controle do tipo timer para o form.
10- Mude a propriedade interval para 1000.
11- Exiba o cdigo do Controle e crie uma varvel do tipo inteiro com o nome Segundos e inicialize-a com 0.
12- V at a lista de eventos do Timer e d um duplo clique no evento Tick.
13- Dentro do mtodo criado coloque o cdigo abaixo:
Segundos++;
lblTempo.Text = Segundos.ToString();
12-Agora crie o evento Click do boto e coloque o cdigo abaixo:
timer1.Start();
13-Recompile seu projeto.
66 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
14-Se tudo correu certo v at a ToolBox, o seu controle customizado estar logo no comeo com o nome que voc atribuiu ao
mesmo arraste para um form execute; Clique no boto iniciar para ver o resultado.
Controle estendido
1 Em um projeto Windows Forms clique com o boto direito New->Item->Code->Class.
2-Coloque o nome TextBoxCustom.
3-Adicione uma herana para a classe TextBox e coloque o modificador publico sintaxe abaixo:
public class TextBoxCustom:TextBox
4-Crie um construtor default mude a cor de fundo e a cor da letra, as propriedades fazem parte da sua classe agora por conta da
herana ento basta usar o this, sintaxe abaixo:
public TextBoxCustom()
{
this.BackColor = Color.Black;
this.ForeColor = Color.White;
}
5-Recompile o projeto.
6-V at a ToolBox, na mesma seo onde se encontra o Cronometro teremos o TextBoxCustom, arraste-o para o form e mude a
propriedade Text para perceber as customizaes.
Generics
Os Generics foram adicionados verso 2.0 da linguagem C# e do Common Language Runtime (CLR). Generics introduzem no
.NET Framework o conceito de parmetros de tipos, que tornam possveis a estruturao de classes e mtodos que adiam a
especificao de um ou mais tipos at que a classe ou mtodo seja declarada e instanciada pelo cdigo do cliente. Por exemplo,
usando um parmetro de tipo genrico T voc pode escrever uma nica classe que outro cdigo do cliente poder usar sem
aumentar o custo ou risco de converses (cast) em tempo de execuo (runtime) ou operaes de boxing, conforme mostrado
abaixo:
Viso genrica
Usar tipos genricos para maximizar reutilizao de cdigo, segurana de tipo, e desempenho.
O uso mais comum de generics para criar classes coleo.
A biblioteca de classes do .NET Framework contm vrias novas classes de colees genricas no
namespace System.Collections.Generic. Eles devem ser usados sempre que possvel, em vez de classes como ArrayList do
namespace System.Collections.
Voc pode criar suas prprias interfaces genricas, classes, mtodos, eventos e delegates.
Classes genricas podem ser utilizadas para permitir acesso aos mtodos usando tipos de dados especficos.
Informaes sobre os tipos que so usados em um tipo de dados genricos podem ser obtidas em tempo de execuo
usando reflexo.
Por exemplo, podemos fazer um mtodo que converte qualquer string para um enum com o tipo correto.
{
try
{
return (T)Enum.Parse(typeof(T), value.ToString());
}
catch (Exception e)
{
string msg = e.Message;
return Activator.CreateInstance<T>();
}
}
Lambda Expression
Uma expresso lambda uma funo annima que pode conter expresses e instrues, e pode ser usada para criar ponteiros de
funo ou tipos de rvores de expresso. Todas as expresses lambda usam o operador lambda = >, que lido como "vai para". O
lado esquerdo do operador lambda especifica os parmetros de entrada (se houver) e o direito contm a expresso ou o bloco de
instrues a expresso lambda x => x * x lido " x recebe x vezes x. " Esta expresso pode ser atribuda a um ponteiro de funo
da seguinte maneira:
As expresses lambdas so muito uteis ao trabalharmos com colees, pois podemos passar uma expresso Lambda para os
mtodos que filtram e ordenam a coleo veja alguns exemplos abaixo.
class Pessoa {
public string Nome { get; set; }
public int Idade { get; set; }
public Pessoa() {
Nome = "NomePadrao";
Idade = 12;
}
public object[] RetornaDados() {
return new object[] { Nome, Idade };
}
}
class Program
{
static void Main(string[] args)
{
List<Pessoa> lstpess = new List<Pessoa>();
lstpess.Add(new Pessoa() { Nome = "joo", Idade = 18 });
lstpess.Add(new Pessoa() { Nome = "joozin", Idade = 12 });
lstpess.Add(new Pessoa() { Nome = "joozo", Idade = 18 });
lstpess.Add(new Pessoa() { Nome = "robert", Idade = 15 });
lstpess.Add(new Pessoa() { Nome = "hebert", Idade = 18 });
lstpess.Add(new Pessoa() { Nome = "kenko", Idade = 21 });
lstpess.Add(new Pessoa() { Nome = "louis", Idade = 18 });
lstpess.Add(new Pessoa() { Nome = "hermes", Idade = 56 });
List<Pessoa> ListaFiltrada;
List<Pessoa> ListaOrdenada;
Classe Descrio
Type Essa a classe fundamental do namespace reflection ela abstrai
as principais informaes que so relevantes a respeito de um
determinado tipo.
PropertyInfo Rene informaes sobre uma propriedade como nome e o tipo
da mesma.
Activator Utilizado para criao de instncias dinamicamente.
Assembly Rene informaes sobre um mdulo Assembly, como os tipos
contidos no mesmo.
Vamos ver na prtica como realizar as tarefas mais comuns com Reflection;
//Todos os objetos tem o mtodo GetType() pois o mesmo est definido na classe elementar
object.
//O GetType retorna uma Type que tem o mtodo GetProperties() que retorna uma lista com
informaes sobre as propriedades da classe.
PropertyInfo[] PropI = pess.GetType().GetProperties();
int Contador=10;
if (item.Name == "Nome")
item.SetValue(pess, "Nome" + Contador.ToString(), null);
else
item.SetValue(pess, Contador, null);
Contador++;
}
Console.WriteLine(item.GetValue(pess, null));
}
}
Criar a instncia de um tipo annimo
//O mtodo abaixo cria uma instncia do tipo definido na hora da chamada, na definio no se sabe
qual tipo ser criado.
static T CriaInstanciaAnonima<T>() {
return Activator.CreateInstance<T>();
}
Carrega dinamicamente um tipo contido em outro assembly
Essa eu considero a funcionalidade mais importante. Porm mais complexo de ser feito por tanto vamos passo a passo.
object[] RetornaDados();
5-)Adicione um novo projeto ClassLibrary com o nome BusinessLayer.
7-)Clique com o boto direito sobre o projeto selecione Add Reference->Aba projects->Abstracoes->Ok.
Using Abstracoes
Cdigo:
public Clientes() {
Nome = "nome padro";
Cpf = "Cpf padro";
}
17-)Arraste um Button e chame-o de btnAbrir, mude a propriedade text para Localizar DLL e a propriedade ReadOnly para
true.
18-)Arraste um novo TextBox para tela e chame-o de txtExibicao, mude a propriedade MultLine para true.
70 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
MessageBox.Show("Arquivo invlido");
return;
}
foreach(Type item in asm.GetTypes()){
if(item.GetInterface("IReflexaoDb")!=null){
}
22-)Rode o programa clique no boto e v at a pasta onde voc havia guardado a DLL BusinessLayer compilada clique sobre ela,
o programa carregar a DLL dinamicamente e exibir os valores do mtodo RetornaDados de todos as classes derivadas de
IReflexaoDb, no caso somente a classe Clientes, notem que no temos uma referncia DLL onde a classe clientes est definida e
nem conhecemos o tipo clientes durante o desenvolvimento, a aplicao s saber disso no momento que usurio selecionar a
DLL onde os tipos esto contidos. Dessa forma a nossa aplicao exibe os dados de qualquer derivada da interface IReflexaoDb,
desde que indiquemos o caminho do mdulo onde ela est contida.
class Pessoa {
public string Nome { get; set; }
public int Idade { get; set; }
public Pessoa() {
71 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Nome = "NomePadrao";
Idade = 12;
}
public object[] RetornaDados() {
return new object[] { Nome, Idade };
}
}
Console.ReadKey();
}
LINKS
ConnectionsStrings - http://www.connectionstrings.com/
72 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Herana
Consiste na possibilidade de classes compartilharem propriedades e mtodos atravs da relao de herana. utilizada com a
inteno de evitar a repetio de cdigo.
Exemplo
public class Pessoa
{
public string Nome { get; set; }
//Mtodo retorna dados marcado como virtual isso significa que pode ser sobrescrito pelas
derivadas
public virtual List<object> RetornarDados()
{
List<object> lst = new List<object>();
lst.Add(Nome);
return lst;
}
}
//A classe Cliente j tem a propriedade Nome e o mtodo RetornaDados, pois herda da classe
Pessoa
public class Cliente : Pessoa
{
public DateTime UltimaCompra { get; set; }
//A classe Cliente estende a classe pessoa adicionando na lista a propriedade UltimaCompra
alm do que j havia
// sido adicionado pela classe base
public override List<object> RetornarDados()
{
List<object> lst = base.RetornarDados();
lst.Add(UltimaCompra);
return lst;
}
}
//A classe fornecedor j tem a propriedade Nome e o mtodo RetornaDados, pois herda da classe
Pessoa
public class Fornecedor:Pessoa
{
public string Categoria { get; set; }
//A classe Fornecedor estende a classe pessoa adicionando na lista a propriedade Categoria
alm do que j havia
// sido adicionado pela classe base
public override List<object> RetornarDados()
{
List<object> lst = base.RetornarDados();
lst.Add(Categoria);
return lst;
}
}
Abstrao
Consiste em concentrar nos aspectos essenciais de um contexto qualquer, ignorando caractersticas menos importantes ou
acidentais. Em modelagem orientada a objetos, uma classe uma abstrao de entidades existentes no domnio do sistema de
software. Por exemplo, vamos abstrair uma pessoa temos uma srie de caractersticas e aes que podem ser abstradas, mas
temos que escolher somente as que so significativas para o sistema.
73 Apostila: Desenvolvimento de aplicaes comerciais com Microsoft C#
Encapsulamento
Consiste na separao dos aspectos internos e externos de um objeto. Este mecanismo utilizado amplamente para impedir o
acesso direto ao estado do objeto(seus atributos), disponibilizando aos outros objetos apenas os mtodos que fazem a acesso a
esses objetos, no caso do C# os getters e setters que no deixam de ser mtodos, apesar de na chamada ser parecida com o acesso
a um atributo. Exemplo voc no precisa conhecer a composio qumica e nem como produzido um remdio para toma-lo, voc
apenas sabe o que ele se prope a fazer e no se preocupa como ele faz isso.
Polimorfismo
Permite que uma mesma declarao de objeto contenha uma instncia de uma classe derivada da mesma, sendo assim esse mesmo
objeto se comporta de maneiras diferentes dependendo da instncia passada a ele. Alguns autores consideram a sobrecarga de
mtodos como uma forma de polimorfismo.
Exemplo
Vamos utilizar as classes Cliente e Fornecedor do exemplo de herana, se declararmos um objeto pessoa e atribuir a ele uma
instancia de Cliente o mtodo RetornaDados se comportar de uma maneira se for uma instancia de Fornecedor se comportar de
outro acompanhe no cdigo abaixo:
static void Main(string[] args)
{
Pessoa pess;
}
static void ExibeDados(List<object> values) {
foreach (object item in values)
{
Console.WriteLine(item.ToString());
}
}
Princpios
A programao orientada a objetos tem seus pilares e no pode existir sem os mesmos, mas existem princpios que apesar de no
fazer parte da sua concepo so extremamente importantes e desejveis em sistema bem desenhados. Abaixo comentaremos
sobre alguns dos mais importantes.
SOLID
Essa sigla um acrnimo para a palavra inglesa solid, que significa slido, solidez. Cada letra representa um acrnimo de um
princpio, ou seja, temos um acrnimo de acrnimos. Esse conjunto o resultado de estudos e experincias de vrios
desenvolvedores e foi primeiramente catalogado por Rober Uncle bob Martin(veja sesso de links) em seu livro Applying
Principle and Patterns. Vamos conhecer cada princpio.
atender a responsabilidade da classe. Outros autores tambm chamam este princpio de coeso. Para entendermos o seu
significado vamos imaginar um cenrio que todos conhecem. Digamos que voc possui uma classe que represente uma nota fiscal,
a classe Nota-Fiscal. E voc a codificou de tal forma que ela mesma, alm de conter seus itens, seus clculos, tambm sabe como
se salvar e se recuperar do banco de dados at mesmo sabe se exportar nos mais diversos formatos. Se pararmos para pensar,
temos uma srie de responsabilidades agregadas que no deveriam ser da nota fiscal. Reparem que temos mais de um motivo para
alterar a classe, por exemplo se mais um tipo de exportao aparecer teremos que refatorar nossa classe. O Ideal seriamos ter por
exemplo um objeto exportador e ainda objetos especficos para cada formato de arquivo, deveramos separar os mtodos de
gravao criar uma classe especifica para realizar as aes no banco
Principios adicionais
Dry-Dont repeat yourself
No se repita. Duplicar uma lgica pelo sistema prejudica sua manuteno e estabilidade, porque caso voc precise
ajustar essa lgica que est duplicada, e esquecer algum ponto, seus sistema ter duas resposta diferentes para a mesma lgica.