Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila C#
Apostila C#
Contedo
Pgina
1
Captulo 1- .NET
Framework
O que ?
Histria
Verses do .NET Framework
Principais Recursos por verses
Arquitetura bsica
O que IL?
Garbage Collection
GAC
LINKS
1
1
2
2
3
3
6
6
7
Captulo 2-Microsoft
Visual Studio 2010
O que ?
Histria
Funcionalidades por verses
Como iniciar?
Estrutura de um projeto e tipos de
arquivos bsicos
Templates
Code Snippet
Ferramentas de analise de cdigo
Principais janelas do VS 2010
Debugando com VS 2010
IntelliTrace
Gerando um release
LINKS
Captulo 3-Microsoft C#
O que ?
Histria
Viso conceitual classes
Namespaces
Using
Tipos de dados bsicos
Tipos de valor e de referncia
Varveis
Operadores
Desvios condicionais
Switch
Estruturas de repetio
Tratamento de erro
Arrays e Lists
Windows Forms
Eventos
Guia rpido: Hello World
Principais componentes Windows
8
8
8
8
10
11
12
13
13
13
14
16
16
17
17
17
17
18
18
19
20
21
21
24
25
26
30
30
32
32
33
34
Forms
Trabalhando com arquivo texto
Modificadores de acesso
Classes
Propriedades e variveis
Construtores
Mtodos
Sobrecarga
Enums
Herana
Classes e mtodos estticos
Converses
Interfaces
ADO.net Trabalhando com
bancos de dados
Criao de controles
customizados
Generics
Lambda Expressions
Reflection
LINKS
Captulo 4 Orientao a
objetos
51
53
53
53
54
56
57
59
59
60
61
61
62
65
66
67
68
71
72
Pilares
Princpios
72
73
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.
O .net Framework projetado para atender os seguintes objetivos:
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.
Verso do .NET
Framework
1.0
Verso
do CLR
1.0
Descrio
1.1
1.1
2.0
2.0
3.0
2.0
3.5
2.0
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.
Abaixo um pequeno exemplo hello world em c# e abaixo o mesmo programa em IL.
Verso C#;
using System;
namespace HelloWorldIL
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World !");
}
}
}
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
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.
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:
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
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.
-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
-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.
Do que se trata
*.sln
*.suo
*.csproj
*.cs
*.resx
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
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
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.
14
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
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.
Para habilitar o IntelliTrace:
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.
16
LINKS
Pgina oficial do Visual Studio 2010 - http://msdn.microsoft.com/en-us/vstudio/default
Histria Visual Studio - http://blogs.msdn.com/b/ricom/archive/2009/10/05/my-history-of-visual-studio-part-1.aspx
Artigo Wikipedia - http://en.wikipedia.org/wiki/Microsoft_Visual_Studio
17
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#.
//Funes
public void Method1();
public void MethodN...();
}
18
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;
public Canil(Animais.Poodle Cachorro1,Animais.PastorAlemao Cachorro2) {
this.Cachorro1 = Cachorro1;
this.Cachorro2 = Cachorro2;
}
}
}
19
Observe os outros namespaces antes de Animais, so onde esto os tipos fundamentais do framework e por padro so
adicionados ao criar uma classe.
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.
Abaixo exemplo de cdigo que geraria um erro no compilador
static void Main(string[] args)
{
int a = 5;
int b = a + 2; //OK
bool test = true;
// Error. Operator '+' cannot be applied to operands of type 'int'
and 'bool'.
int c = a + test;
}
20
Abrangncia
-128 to 127
Tamanho em bits
byte
0 to 255
char
U+0000 to U+ffff
16
short
-32,768 to 32,767
16
ushort
0 to 65,535
16
int
-2,147,483,648 to 2,147,483,647
32
uint
0 to 4,294,967,295
32
long
-9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
64
ulong
0 to 18,446,744,073,709,551,615
64
8
8
Abrangncia
float
1.5e45 to 3.4e38
double
5.0e324 to 1.7e308
decimal
28
28
0 to 28
Preciso
Tamanho
em bits
7 dgitos
32
15-16dgitos
64
128
Descrio
string
DateTime
Representa um espao de tempo e contm uma srie de funes para lidar com datas
21
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:
[Tipos] [Nome Da Varivel];
Exemplo:
int Numero;
As variveis assim como as funes s podem ser definidas dentro de uma classe.
Operadores
Em C #, um operador um elemento do programa que aplicada a um ou mais operaes em uma expresso ou
declarao. Operadores que levam um operando, como o operador de incremento (+ +), so referidos como operadores
unrios. Operadores que usam dois operandos, como operadores aritmticos (+,-,*,/), so referidos como operadores binrios. O
operador condicional (?:), leva trs operandos e o nico operador ternrio em C #.
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
Descrio
x.y
f(x)
a[x]
x++
x-new T(...)
new T(...){...}
new {...}
new T[...]
typeof(T)
checked(x)
unchecked(x)
default (T)
delegate {}
Acesso de associado
Invocao de mtodos e delegates
Array and indexer access
Ps-incremento
Ps-decremento
Criao de objetos e delegates
Criao de objeto com inicializador.
Inicializador de objeto annimo.
Criao de array
Obtm o Sytem.Type para T
Executa a expresso em um contexto checado
Executa a expresso em um contexto no checado
Obtm o valor default para T
Funo annima(Mtodo annimo)
Operadores unrios
Expresso
Descrio
+x
-x
!x
~x
++x
--x
(T)x
Identidade
Negao
Negao lgica
Negao bit bit
Pr-Incremento
Pr-decremento
Converso explicita para o tipo T
Operadores multiplicativos
Expresso
Descrio
*
/
%
Multiplicao
Diviso
Resto
Operadores Aditivos
Expresso
Descrio
x+y
x-y
Operadores de troca
23
Descrio
x << y
x >> y
Troca direita
Troca esquerda
Descrio
x<y
x>y
x <= y
x >= y
x is T
x as T
Menor
Maior
Menor ou igual
Maior ou igual
Retorna se x do tipo T.
Retorna x tipado como T ou nulo se no for possvel.
Operadores de igualdade
Expresso
Descrio
x == y
x != y
Igual
Diferente
Expresso
Descrio
Logical AND
Logical XOR
Logical OR
Conditional AND
Conditional OR
Null coalescing
Conditional
x&y
x^y
x|y
x && y
x || y
x ?? y
x ?: y : z
Descrio
=
x op= y
(T x) => y
Atribuio
Compound assignment. Supports these operators: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>=
Funo annima (lambda expression.)
24
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:
if( [Expresso booleana]){
Trecho de cdigo...
}
Voc pode definir o segmento else para um if que serve como fluxo alternativo caso a condio testada seja falsa.
if( [Expresso booleana]){
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.
if( [Expresso booleana]){
Trecho de cdigo...
}else if([Expresso booleana]){
25
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.
A sintaxe bsica para o switch a seguinte
switch([Nome da varivel]){
case [possvel valor 1]
[Aes a serem executadas];
break;//Termina a execuo da instruo switch
....
case[Possvel valor n]
[Aes a serem executadas];
break;//Termina a execuo da instruo switch
26
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:
while ([Expresso booleana]) {
[Conjunto de instrues]
27
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:
//Declarao de uma varivel
int i = 0;
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.
//Escreve o valor de i no console
Console.WriteLine(1);
//Soma 1 ao valor de i a cada execuo do bloco de cdigo.
i++;
}
while (i < 10);//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
//Espera que uma tecla seja digitada para encerrar a execuo do programa.
Console.ReadKey();
28
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(--).
*/
for (int i = valores.Length-1; i >=0; i--)
{
//Escreve o valor que est na posio "i" da lista a cada iterao sendo que o "i"
vai sendo decrementado a cada iterao.
//Todos os valores da lista sero escritos na tela em ordem decrescente.
Console.WriteLine(valores[i]);
}
//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
Exemplo:
//Declarando um array de inteiros, e j inicializando com valores.
int[] valores = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
/*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);
}
/*Agora em ordem decrescente
Basta utilizar o mtodo reverse disponvel para qualquer tipo de array, que a ordem dos
valores na lista ser invertida completamente.
Como os valores esto organizados em forma crescente nesse exemplo, ao inverter sero
apresentados de forma decrescente.
*/
foreach (int item in valores.Reverse())
{
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.
//Declarando um array de inteiros, e j inicializando com valores.
int[] valores = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
30
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{
[Conjunto de instrues que podem lanar uma exceo]
}catch([Tipo de exceo] [Nome da varivel](Opcional declarao da varivel)){
[Conjunto de instruo que gerencia a exceo ocorrida]
}
Exemplo:
int[] vals=new int[]{0,1,2,3,4,5,6,7,8,9};
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:
[tipo de dado][] [Nome da varivel];
31
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.
32
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();
Um Array pode ser transformado em List atravs do mtodo ToList(),exemplo abaixo:
List<int> MyList;
int[] Myarray=new int[10];
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);
Descrio
Inverte a ordem dos elementos na lista.
Retorna o primeiro elemento da lista.
Ordena os valores da lista de acordo com o valor passado com
parmetro.
Retorna o elemento de valor mximo pela ordem de
precedncia.
Retorna o elemento de valor mnimo pela ordem de
precedncia.
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
34
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
Selecione o item Windows Form, mude o nome na caixa de texto abaixo da lista conforme desejado. E clique no boto Add.
36
Descrio
(Name)
Backcolor
BackgroundImage
BackgroundImage1Layout
ControlBox
Cursor
Enabled
Determina se o form est habilitado, se estiver falso todos os controle hospedados tambm ficaro
desabilitados
Atribui a font padro para textos do form.
Font
ForeColor
Determina uma cor de primeiro plano padro, ser utilizada para todos controle caso no seja
atribuda separadamente.
FormBorderStyle
HelpButton
Icon
Location
Determina o posicionamento do form na tela quando a propriedade StarPosition est com o valor
Manual.
MaximizeBox
MaximumSize
MinimizeBox
MinimumSize
Opacity
Size
StartPosition
Text
TopMost
Visible
Windowstate
37
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.
Os requisitos do primeiro so:
1.
2.
3.
4.
5.
6.
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.
Para adicionar controles a um container basta arrasta-los da ToolBox para o mesmo.
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.
Temos um boto dentro de um groupbox na imagem abaixo.
38
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:
Abaixo temos um label fixado no topo do container.
39
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.
Tabela com as principais propriedades do GruopBox:
Propriedade
Text
Descrio
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
BorderStyle
Descrio
Indica se barras de rolagem apareceram automaticamente caso
algum controle contido no Panel estiver ultrapassando seus
limites.
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.
BorderStyle
FlowDirection
WrapContents
SetFlowBrake
GetFlowBrake
Descrio
Indica se barras de rolagem apareceram automaticamente caso
algum controle contido no Panel estiver ultrapassando seus
limites.
Define se o Panel ser circundado por bordas e qual ser o
estilo das mesmas.
Define a ordem do fluxo dos componentes dentro do Panel
Indica se as quebras de linha acontecem automaticamente
quando os componentes ultrapassam as extremidades do Panel
Mtodo, Seta manualmente em qual componente acontece a
quebra de linha.
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.
A tabela abaixo demonstra as principais propriedades de um TableLayoutPanel
Propriedade
AutoScroll
CellBordeStyle
Column Count
Columns
Descrio
Indica se barras de rolagem apareceram automaticamente caso
algum controle contido no Panel estiver ultrapassando seus
limites.
Define se as clulas sero circundadas por bordas e qual ser o
estilo das mesmas.
Define a quantidade colunas na tabela
Apresenta uma coleo editvel das colunas da tabela, onde
41
ColumnStyles
GrowStyle
RowCount
Rows
RowStyles
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
Descrio
Propriedade do TabControl; Determina o estilo visual do
TabControl.
Determina se as abas aparecero em cima, em baixo, direito
ou esquerda do TabControl.
Propriedade do TabControl; Indica se mais uma linha de abas
pode existir na TabControl.
Propriedade do TabControl; Coleo das TabPages, voc pode
edita-las nessa propriedade.
Propriedade da TablePage; Indica quando as barras de rolagem
aparecem automaticamente de acordo com a necessidade.
Propriedade da TablePage; Determina se a aba ser circundada
por borda e qual ser o estilo da mesma.
Propriedade da TablePage; Representa o ttulo da aba.
Alignment
Multline
TabPages
AutoScroll
BorderStyle
Text
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.
Abaixo uma tabela com as principais propriedades do SplitContainer
Propriedade
BorderStyle
Descrio
Determina se o SplitterContainer ser circundada por borda e
se sim, qual ser o estilo da mesma.
Essa propriedade indica qual Panel do SplitContainer ser
fixado no tamanho essa propriedade assume os valores Panel1,
Panel2 e none.
Determina se a posio do divisor poder ser reajustada pelo
usurio em tempo de execuo.
Determina se o divisor se movimentar horizontalmente ou
verticalmente.
Expes as propriedades do primeiro Painel do SplitContainer
Retorna se o segundo painel do SplitContainer est recolhido.
Determina o tamanho mnimo que o segundo painel do
SplitContainer pode assumir.
Representa a distancia do divisor em relao extremidade
esquerda ou da extremidade superior dependendo da orientao
Representa a largura do divisor.
Fixed Panel
IsSplitterFixed
Orientation
Panel1
Panel2Collapsed
Panel2MinSize
SplitterDistance
SplitterWidth
Descrio
Anchor
BackColor
43
CausesValidation
ContainsFocus
Indica quando o controle executa mtodos de validaes, esses mtodos servem para verificar
se a entrada de dados do usurio est de acordo com as regras de negcio.
Indica quando o foco esta no prprio controle ou um em dos seus filhos.
Controls
Cursor
Dock
Enabled
Determina se o controle est fixado em uma das extremidades do container pai ou preenchendo
o mesmo.
Determina se o controle est habilitado e funcional.
Font
Determina a fonte que ser utilizada para escrever eventuais textos do controle.
ForeColor
HasChildren
Height
Location
MaximumSize
MinimumSize
Name
Parent
Atribui um nome ao controle para ser acessvel via cdigo, s pode ser atribuda durante o
design.
Retorna o form pai ou o container que o controle est contido.
Region
Size
TabIndex
Representa a ordem de precedncia do controle quando a tecla Tab for utilizada para navegar
controle a controle.
Serve para o programador associar algum dado ao controle para auxilia-lo na programao.
Tag
Text
Visible
Width
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
DialogResult
FlatAppearance
Determina como o boto parecer quando a propriedade FlatStyle estiver com valor verdadeiro
FlatStyle
Text
Quando o valor est verdadeiro o padro deixa de acompanhar a aparncia padro do Windows
e passa a respeitar o que desenvolvedor define no FlatAppearance
Atribui o texto que aparece no boto.
TextAlign
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
Exemplo
1.
2.
3.
4.
5.
Crie um novo projeto Windows Forms, arraste um controle Button da ToolBox para o formulrio padro.
Altere o valor da propriedade Name para btnMudaCor.
Altere o valor da propriedade Text para Mudar cor de fundo.
Abra a lista de eventos do boto e d um duplo click no evento Click.
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);
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
AutoCompleteCustomSource
AutoCompleteMode
Descrio
Hospeda uma coleo de strings utilizadas para Auto Complemento quando
AutoCompleteMode estiver com valor diferente de none e o
AutoCompleteSource estiver com valor custom.
Atribui a forma do auto completar, os possveis valores so: Normal,Upper e Lower
MaxLength
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
pelo desenvolvedor.
Determina a forma como os caracteres ficaro na caixa de texto, os valores so:UpperTodos em maisculo, Lower-Todos em minsculo e Normal-Permanece como o
usurio digitar.
Representa uma coleo de strings que refletem o valor da caixa de texto separado em
linhas, s significante quando a propriedade MuliLine estiver com valor verdadeiro.
Determina o nmero mximo de caracteres que o TextBox pode aceitar.
MultiLine
AutoCompleteSource
CharacterCasing
Lines
PasswordChar
ReadOnly
ScrollBars
Text
UseSystemPasswordChar
WordWrap
Quando um caractere definido nesse campo, todo caractere digitado pelo usurio
substitudo pelo mesmo na apresentao, porm via cdigo o valor da propriedade
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
atravs da seleo do mesmo.
Indica se barras de rolagem aparecero na caixa de texto caso mltiplas linhas forem
aceitas.
Uma string representando o texto contido na caixa de texto.
Determina se o texto atual deve ser substitudo pelo caractere de senha padro do
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
verdadeiro.
Exemplo
1.
2.
3.
4.
5.
Crie um novo projeto Windows Forms, arraste um controle TextBox da ToolBox para o formulrio padro.
Altere a propriedade Name do TextBox para txtMensagem.
Arraste um controle Button da ToolBox para o formulrio padro.
Altere a propriedade Name do Button para btnExibir e a propriedade Text para Exibir.
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
AutoCheck
Checked
CheckState
Text
ThreeState
Descrio
Determina se o CheckBox ser
automaticamente marcado
quando o usurio clicar no texto
que o identifica.
Determina se o CheckBox est
marcado
Determina o estado da marcao
do CheckBox,
Indeterminate,Checked ou
UnChecked
Representa o texto que identifica
o CheckBox para o usurio
Determina se o CheckBox aceita
dois ou trs estado de marcao.
Exemplo
1)Crie um novo projeto Windows Forms, arraste da ToolBox um Label para o formulrio padro.
2)Altere a propriedade Name para lblIngredientes e a propriedade Text para Ingredientes.
3)Arraste 4 CheckBoxes para o formulrio e altere as propriedades dos mesmos conforme a tabela abaixo:
Primeiro
Segundo
Terceiro
Quarto
Propriedade Name
chkCarneSeca
chkCatupiry
chkBacon
chkPalmito
Propriedade Text
Carne seca
Catupiry
Bacon
Palmito
4)Arraste um boto para o formulrio coloque o valor da propriedade name para btnMostraEscolha e a Text para Mostrar
Escolha.
5)Acerte o layout para ficar parecido com o da imagem abaixo.
47
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
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.
MessageBox.Show("Ingredientes:\r\n"+ string.Join("\r\n", Ingredientes.ToArray()));
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
Checked
Text
Descrio
Indica se o Radio button esta
marcado.
Representa o texto que identifica
a opo par ao usurio.
Exemplo
1)Utilize o mesmo formulrio do exemplo anterior.
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.
Primeiro
Segundo
Propriedade Name
rdbCheddar
rdbMussarela
Propriedade Text
Cheddar
Mussarela
Propriedade Checked
true
false
if (rdbMussarela.Checked)
borda = rdbMussarela.Text;
49
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
InsertKeyMode
Mask
PromptChar
AsciiOnly
BeepOnError
CutCopyMaskFormat
HidePromptOnLeave
RejectInputOnFirstFailure
ResetOnPrompt
ResetOnSpace
TextMaskFormat
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.
Elemento da mscara
0
9
Descrio
Representa um dgito obrigatrio
de 0-9
Representa um dgito opcional de
0-9
Representa um dgito opcional de
0-9 ou um espao.+ e tambm
so aceitos.
Representa uma letra obrigatria,
maiscula (A-Z) ou minscula
(a-z)
50
&
A, a
<
>
|
Exemplo
1)Crie um novo projeto Windows Forms, arraste um controle MaskedTextBox da ToolBox para o formulrio padro.
2)Altere a propriedade Name do MaskedTextBox 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)Altere a propriedade Mask do MaskedTextBox para 999.999.999-9.
6)Crie uma varivel do tipo string no formulrio chamada Mensagem e inicialize-a. Cdigo abaixo:
51
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.
Descrio
Fornece mtodos estticos para criao, cpia, deleo,
movimentao e abertura de arquivos.
FileStream
StreamWriter
StreamReader
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.
FileStream fs = new FileStream("C:\\MyText.txt", FileMode.OpenOrCreate);
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
Ler de um arquivo
A primeira parte continua igual criar uma instncia do FileStream no mode OpenOrCreate.
FileStream fs = new FileStream("C:\\MyText.txt", FileMode.OpenOrCreate);
S que agora instanciaremos uma classe de leitura a StreamReader.
StreamReader sr = new StreamReader(fs);
E usaremos os mtodos Read e ReadLine;
/*
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
Para apagar o arquivo usamos o mtodo esttico Delete da classe File.
File.Delete("C\\MyText.txt");
53
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
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.
A sintaxe bsica para criao de uma classe em c# a seguinte.
[Modificador de visibilidade] class [Nome da classe]{
//Definio da classe
}
Tudo que est entre as duas chaves que delimitam o escopo da classe fazem parte da mesma.
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 :
[Modificador de visibilidade] [Tipo] [Nome da propriedade]{
//Ao menos um dos modificadores abaixo necessrio, mas no obrigatrio ter ambos ao mesmo tempo.
//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
Exemplos
class Pessoa {
//Varivel privada somente a prpria classe tem acesso a ela.
int Idade;
//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();
}
}
private string _nomeReadOnly;
private string _nomeWriteOnly;
//Outros exemplos
//Quando definidos somente um operador de acesso precisamos definir o corpo do mesmo.
public string NomeReadOnly
{
get {
return _nomeReadOnly;
}
}
public string NomeWriteOnly
{
set {
_nomeWriteOnly = value;
}
}
}
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
56
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:
[Modificador de visibilidade] [Modificador opcional] [Nome do mtodo]([Lista de parmetros]){
//Definio
}
Exemplo:
//O mtodo abaixo no retorna nenhum valor, est acessvel a qualquer elemento e recebe uma string
como parmetro
public void Pessoa(string Nome) {
//Definio
}
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
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 {
public string FormataDados(string Nome) {
return "Nome:" + Nome;
}
public string FormataDados(string Nome, string Cpf) {
return "Nome:" + Nome + " Cpf:" + Cpf;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Pessoa2().FormataDados("Vinicius"));
//Sada = Nome:Vinicius
Console.WriteLine(new Pessoa2().FormataDados("Vinicius", "01234567890"));
//Sada=Nome:Vinicius Cpf:01234567890
Parmetros opcionais
Em C# podemos ter parmetros opcionais nos mtodos, isso significa que na chamada no necessrio passar todos os parmetros
definidos na assinatura do mtodo, isso possvel definindo um valor padro para o parmetro o qual usado no caso de no ser
especificado na chamada. Isso pode ser til quando precisamos acrescentar um novo parmetro em um mtodo usado muitas vezes
na aplicao e desejamos que ele continuasse funcionando da mesma maneira de antes onde j foi utilizado.
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
Exemplos
class Program2
{
static void Main(string[] args)
{
//Parmetro por referncia
PessoaSimp pess = new PessoaSimp();
pess.Nome = "Nome escopo classe";
pess.CPF = "Cpf escopo classe";
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
Segunda,
Tera,
Quarta,
Quinta,
Sexta
}
60
Nesse caso mamferos passa a ser um animal e possuir todos os elementos da classe base que as restries de visibilidade
permitam.
61
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.
//string para inteiro
string IntStr = "1";
//S devemos usar o parse se tivermos certeza que o valor da string representa um nmero
inteiro.
//Pois se no representar uma exceo ser lanada.
int Inteiro = int.Parse(IntStr);
//Quando no temos certeza se o valor da string um inteiro melhor utilizar o
TryParse.
//Retorna um booleano indicando se a converso foi um sucesso.
bool Sucesso = int.TryParse(IntStr,out Inteiro);
//string para double
string DoubStr = "1,1";
double db = double.Parse(DoubStr);
Sucesso = double.TryParse(DoubStr, out db);
//string para float
string FloatStr = "1,1";
float fl = float.Parse(FloatStr);
Sucesso = float.TryParse(FloatStr, out fl);
//string para decimal
string decStr = "1,1";
decimal dc = decimal.Parse(decStr);
Sucesso = decimal.TryParse(decStr, out dc);
//string para DateTime
string DtStr = "10/01/2011";
DateTime dt = DateTime.Parse(DtStr);
Sucesso = DateTime.TryParse(DtStr, out dt);
Outra forma de converso a conhecida como cast ele usado para converter um tipo da classe base para qualquer tipo
derivado, o tipo object, por exemplo, pode ser castado para qualquer outro tipo em C# pois todos derivam dele. Mas ateno se
o tipo que estiver na varivel no for o mesmo que estamos tentando converter, uma exceo ser lanada, a sintaxe do cast a
seguinte:
([nome do tipo)[nome da varivel];
Exemplo
object val = 1;
int intval = (int)val;
//A linha abaixo causa uma exceo.
string strval = (string)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:
[Modificador de visibilidade] interface [Nome da interface]{
//Definio
}
Nas interfaces definimos apenas assinaturas de mtodos que os tipos derivados devero ter, no precisamos definir o modificador
de visibilidade, pois se est na interface o mtodo deve ter acessibilidade irrestrita.
62
Classe derivada
public class Mamiferos : IAnimais {
public void Repirar()
{
throw new NotImplementedException();
}
public string GetNome()
{
throw new NotImplementedException();
}
public void SetNome(string Nome)
{
throw new NotImplementedException();
}
}
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
64
Passagem de parmetros
Quando vamos utilizar um comando que necessita de parmetro o ideal no utilizar a concatenao de string, pois os dados
podem estar em formatos diferente na aplicao e no banco de dados, alm de abrir uma vulnerabilidade para injeo de comando
sql na aplicao. A melhor maneira de se fazer acessar a lista de parmetros da classe derivada de DbCommand de acordo com o
SGBD que estiver utilizando no caso do SqlServer temos as seguinte sobrecargas:
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:
Cmd.Parameters.Add("nome", SqlDbType.VarChar, 5).Value="Jhony";
65
Controles composto, so a forma mais simples de criar um controle customizado, consiste em reunir
controles existentes para criar um novo controle.
Controle estendido, so controles que herdam de um controle como TextBox e Button e estendem suas
funcionalidades.
Para adicionar um controle customizado em seu projeto clique com o boto direito sobre ele na Solution Explorer e escolha no
menu contextual a opo new->Item, selecione a categoria Windows Forms e depois User Control.
Imagem abaixo. Mude o nome como quiser e clique em Add.
Controle composto.
1234567-
8910111213-
66
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:
// Declara a classe genrica
public class GenericList<T>
{
void Add(T input) { }
}
class TestGenericList
{
private class ExampleClass { }
static void Main()
{
// Declara uma lista do tipo int.
GenericList<int> list1 = new GenericList<int>();
// Declara uma lista do tipo string.
GenericList<string> list2 = new GenericList<string>();
// Declara uma lista de um tipo definido pelo usurio.
GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
}
}
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.
public static T StringToEnum<T>(char value) where T : struct,IConvertible
67
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:
delegate int del(int i);
static void Main(string[] args)
{
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
}
Para criar um tipo de rvore de expresso:
Expression<del> myET = x => x * x;
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;
//Retorna todas pessoas com nome joozin
ListaFiltrada=lstpess.FindAll(p => p.Nome == "joozin");
68
Reflection
Reflection habilidade dos objetos observarem a sua prpria estrutura e tambm a de outros objetos em tempo de execuo, com
reflection podem ser criadas instncia de tipos dinamicamente, carregar mdulo compilados e seus tipos, varrer propriedades das
classes e atribuir valor a elas, varrer mtodos do objeto e invoc-los entre outras coisas, tudo isso de maneira dinmica. As
principais funes de reflection esto no namespace System.Reflection.
Principais classes com uma breve descrio.
Classe
Type
Descrio
Essa a classe fundamental do namespace reflection ela abstrai
as principais informaes que so relevantes a respeito de um
determinado tipo.
Rene informaes sobre uma propriedade como nome e o tipo
da mesma.
Utilizado para criao de instncias dinamicamente.
Rene informaes sobre um mdulo Assembly, como os tipos
contidos no mesmo.
PropertyInfo
Activator
Assembly
Vamos ver na prtica como realizar as tarefas mais comuns com Reflection;
69
Using Abstracoes
9-)Adicione a herana de IReflexaoDb para Clientes.
10-)Adicione 2 propriedade do tipo string na classe Clientes Nome e Cpf.
11-)Adicione um construtor default para incializar a varivel.
Cdigo:
public Clientes() {
Nome = "nome padro";
Cpf = "Cpf padro";
}
70
{
string Nome { get; set; }
int Idade { get; set; }
Pessoa() {
71
LINKS
Artigo Wikipedia em ingls sobre o C# - http://en.wikipedia.org/wiki/C_Sharp_(programming_language)
Site ECMA sobre a padronizao C# - http://www.ecma-international.org/publications/standards/Ecma-334.htm
Namespace Programming Guide C# MSDN - http://msdn.microsoft.com/pt-br/library/0d941h9d.aspx
Classes e estrutura C# - http://msdn.microsoft.com/pt-br/library/ms173109.aspx
Manual de referncia do C# msdn - http://msdn.microsoft.com/pt-br/library/618ayhy6.aspx
Um pequeno curso gratuito de C# - http://www.oficinadanet.com.br/artigo/825/curso_de_c_sharp_licao_1_iniciando
Operadores C# MSDN - http://msdn.microsoft.com/pt-br/library/ms173145.aspx
ConnectionsStrings - http://www.connectionstrings.com/
72
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
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;
pess = new Cliente();
pess.Nome = "jo";
//Como o objeto foi declarado com o tipo genrico para acessarmos membros da
especializao
//precisamos realizar um CAST.
((Cliente)pess).UltimaCompra = DateTime.Now;
//Cliente
ExibeDados(pess.RetornarDados());
/*Saida:
jo
*
Hora atual: exemplo 23/08/2011 09:04
*/
pess = new Fornecedor();
pess.Nome = "jo";
((Fornecedor)pess).Categoria = "Farmaceutico";
//Fornecedor
ExibeDados(pess.RetornarDados());
/*Saida:
jo
*
Farmaceutico
*/
Console.ReadKey();
}
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.
74
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.