You are on page 1of 28

C#

Introduo
Esta parte apresenta de forma rpida, ainda que bem informativa, os conceitos e idias
que sustentam a plataforma .NET e a moderna linguagem de programao C#.
creditamos que esta introduo se!a de interesse especial a programadores "ava, C e
C## que gostariam de con$ecer mais sobre esta tecnologia to divulgada pela %icrosoft
nos dias atuais e, no momento oportuno, fa&er um comparativo entre as funcionalidades
apresentadas no C# e aquelas presentes nas linguagens ! con$ecidas e consagradas na
ind'stria. (ara leitores que esto tendo o primeiro contato com o mundo da
programao, esta introduo a fundao para o entendimento das demais partes.
Entendendo a plataforma .NET
)mposs*vel falar de C# sem mencionar a plataforma .NET. linguagem e a plataforma
se completam. linguagem roda na plataforma e a plataforma, por sua ve&, usa a
linguagem como seu principal meio de demonstrao de funcionalidade. %as afinal, o
que a plataforma .NET+
ntes de discutirmos a plataforma, vamos analisar alguns cenrios que o dei,aro mais
preparado para entender situa-es em que c.digos so e,ecutados dentro de um
frame/or0 12im. .NET Framework a palavra mais adequadamente usada em
substituio ao termo 3plataforma .NET34.
5 ano de autoria deste curso se d nos meses finais de 6778 e in*cio de 6779 1a
tecnologia muda da noite para o dia. : mel$or o autor se precaver4. Como bom usurio
do ;indo/s 1ou outro sistema operacional4, voc< ! deve ter vivenciado uma das tr<s
situa-es a seguir=
a) 2eus amigos recomendaram a voc< um .timo site de anima-es. o acess>lo voc<
presenteado com uma tela de do/nloads solicitando a instalao de um plug-in para
visuali&ao do conte'do. )sso ocorreu porque a linguagem usada na animao necessita
de um soft/are que voc< ainda no possui em seu computador. )nstale o plug>in e o
problema ser solucionado. Estamos falando do Macromedia Fla! "la#er.
$) ?oc< acessa um site que usa um %pplet 1pequeno aplicativo "ava que roda direto no
navegador4. Este pplet foi desenvolvido usando as mais recentes ()s do "ava. @ma
mensagem o adverte que a e,ecuo s. ser poss*vel se voc< bai,ar e instalar a 'ltima
verso do "AE 1mbiente de E,ecuo do "ava4.
c) ?oc< acaba de bai,ar um soft/are muito recomendado. o tentar e,ecut>lo, voc<
obtm a seguinte mensagem=
Essa mensagem direta. 5 aplicativo que voc< est tentando instalar foi desenvolvido
para a plataforma .NET e no poder ser e,ecutado at que voc< a instale em seu
computador. (odemos di&er que o tempo de vida desta mensagem ser curto, visto que
futuras vers-es do ;indo/s ! viro com o .NET instalado.
(oder*amos enumerar muitas outras situa-es. (orm, estas tr<s tornam clara a
necessidade de complementao que algumas linguagens ou soft/ares requerem para
uma perfeita e,ecuo. E assim para as linguagens voltadas para a plataforma .NET.
plataforma oferece os mecanismos necessrios para a correta e,ecuo dos c.digos
contidos nestas linguagens, ora gerenciando mem.ria, aplicando restri-es de segurana
ou gerenciando processos e t!read 1t$reads so flu,os de e,ecuo dentro de um
mesmo processo4.
E,iste nos dias atuais 1leia>se per*odo em que este curso estava sendo escrito4 um
movimento muito grande no sentido de adaptar linguagens ! con$ecidas ao paradigma
de desenvolvimento proposto pela plataforma .NET. No surpresa que neste momento
compiladores para mais de 67 linguagens ! esto gerando c.digos que podem ser
e,ecutados na plataforma .NET. t*tulo de ilustrao podemos citar C&'&(,
Fortran, "erl, "#t!on entre outras.
Este movimento compreens*vel e muito salutar aos vrios desenvolvedores que
abraaram estas linguagens e que, no se sentem confortveis em abandonar anos de
e,peri<ncia para se aventurarem nos camin$os do C#, ?B.NET ou C##.NET. Eles
continuaro desenvolvendo para a plataforma ;indo/s usando suas linguagens
favoritas e ainda usufruindo de todo o controle e poder que a plataforma .NET
proporciona. Como a proposta da %icrosoft permitir o acesso Cs ()s das futuras
vers-es do ;indo/s, somente atravs das classes dispon*veis no frame/or0 .NET, mais
e mais desenvolvedores estaro estudando formas de adaptar suas aplica-es a esta nova
realidade.
Em resumo, a plataforma .NET composta pelo Common (anguage )untime 1CDA4
e um grupo unificado de bibliotecas de classes. 5 CAD o responsvel por fornecer os
servios de runtime, ou se!a, desempen$a o mesmo papel que a "?% 1"ava ?irtual
%ac$ine4, to con$ecida dos desenvolvedores "ava. s bibliotecas de classe fornecem
funcionalidades padr-es tais como entrada e sa*da, manipulao de te,to, comunicao
de rede, etc. ?e!a uma demonstrao dos blocos que comp-em o frame/or0=
ntes de continuarmos ten$a em mente que a linguagem C# no apresenta um con!unto
de bibliotecas de classes, como o fa&em diversas linguagens. Toda a funcionalidade da
linguagem oferecida por meio do acesso direto Cs bibliotecas de classes da plataforma
.NET.
Como a aplica*e o e+ecutada na plataforma .NET
Como usurio do ;indo/s voc< ! deve ter se acostumado a ol$ar para um arquivo com
a e,tenso 3e,e3 e assum*>lo como um arquivo e,ecutvel, ou, em outras palavras, um
aplicativo. @m duplo>clique e prontoE 5 aplicativo ! est sendo e,ecutado.
Com a c$egada da plataforma .NET pouca coisa mudou. 5s aplicativos continuam
tendo a e,tenso .e,e. (orm, algumas considera-es muito importantes precisam ser
feitas. 2e voc< ! programou em Felp$i, C##, C, ou qualquer linguagem cu!o
compilador gera instru-es de mquina, deve saber que tudo que o programa precisa
para ser e,ecutado est contido no arquivo e,ecutvel ou em FDDs e arquivos de
recursos espal$ados pelo sistema.
Guando um compilador gera c.digo para a plataforma .NET, temos o que con$ecido
como I( ou M,I(, uma reduo de Microoft Intermediate (anguage. Embora ainda
conten$a a e,tenso .e,e, arquivos que contem %2)D so semel$antes aos BHtecodes do
"ava, ou se!a, c.digos intermedirios que sero fornecidos ao ambiente de e,ecuo. o
final da leitura deste t.pico voc< ! dever estar ciente do que acontece quando voc<
tenta e,ecutar um c.digo compilado para a plataforma .NET em um computador que
ainda no ten$a o frame/or0 instalado.
Guando um arquivo contendo M,I( e,ecutado, o sistema operacional recon$ece
dados neste arquivo que o identifica como c.digo compilado para a plataforma .NET e
o fornece para o ambiente de e,ecuo, !untamente com o c.digo %2)D a ser
e,ecutado. 5 ambiente de e,ecuo, por sua ve&, converte este c.digo intermedirio em
instru-es de C(@ usando um compilador -IT 1-ut-In-Time4. Como este compilador
de tempo de e,ecuo compila para a arquitetura do processador atual, fcil dedu&ir
que um mesmo c.digo %2)D poder ser e,ecutado em arquiteturas diferentes. : uma
noticia agradvel a desenvolvedores do mundo todo.
ntes de concluirmos, importante registrar que c.digos passados para o ambiente de
e,ecuo so c$amados de c.digo gerenciado 1managed code4. C.digos e,ecutados
fora do ambiente de e,ecuo so c$amados de c.digo no gerenciado 1unmanaged
code4. Esta observao se fa& necessria devido Cs restri-es de segurana que a
plataforma .NET imp-e a c.digos gerenciados que podem comprometer a segurana do
sistema operacional. 5utro ponto importante que as vers-es atuais do compilador do
?isual C##.NET pode gerar c.digo gerenciado e no gerenciado. 5 compilador do
?isual C#, que boa parte dos leitores deste curso estar usando, gera apenas c.digo
gerenciado. @ma e,ceo a esta regra o uso da palavra c$ave unafe, que permite o
uso de ponteiros em C# e o fornecimento da opo /unafe para o compilador C#, que
permite que c.digo no gerenciado se!a compilado.
C#0 %pena mai uma linguagem de programao1
Este curso on>line define o C# como a linguagem principal da plataforma .NET. Este
no um e,agero por parte do autor, visto que a pr.pria documentao da plataforma
contm mais e,emplos em C# do que em outras linguagens. lm disso, ol$ando mais
de perto, temos a impresso que algumas caracter*sticas do C# foram introdu&idas para
aproveitar mel$or a plataforma .NET e vice>versa. Especulao ou no, vamos aceitar
esta idia C medida que prosseguimos com a leitura destas partes introdut.rias.
Tanto a plataforma .NET quanto a linguagem C# foram anunciadas pela %icrosoft em
!un$o de 6777. Fesde ento tem se discutido a necessidade de se criar mais esta
linguagem de programao. Este curso no pretende acirrar a discusso, mas, estimul>
lo a aprender a linguagem e us>la da maneira mais produtiva.
Criada por nders Ie!lsberg 1D*der da equipe que criou o Felp$i4 e 2cott ;iltamut$, o
C# uma linguagem completamente orientada a ob!etos, fortemente tipada e muito
similar C C## e "ava, o que a torna de fcil entendimento para programadores nestas
duas linguagens. Guando de seu surgimento comentava>se que o C# era uma
combinao das coisas boas presentes no "ava e no C##. Fei,aremos que o pr.prio
leitor faa sua avaliao no decorrer deste curso. 2e voc< ainda no con$ece "ava e C##
fica a sugesto para que as estude tambm. Cada linguagem possui seus atrativos.
Con$ece>los e saber como aplica>los adequadamente o tornar um programador cada
ve& mais preparado para encarar os desafios da construo de aplica-es para os gostos
mais e,igentes.
&$tendo e intalando o .NET Framework ,23
ntes de desenvolver aplicativos para a plataforma .NET, preciso que voc< ten$a o
,23 1Jit de Fesenvolvimento de 2oft/are4 devidamente instalado em seu computador.
Este 0it contm todas as classes e demais arquivos necessrios C compilao de seus
aplicativos. Keralmente a documentao da plataforma est tambm contida neste 0it.
E,iste tr<s formas distintas de se obter o 2FJ da plataforma .NET=
4) Como parte da instalao do 5iual ,tudio.NET, dispon*vel para consulta em
$ttp=LLmsdn.microsoft.comLvstudio. 5 ?isual 2tudio.NET uma completa su*te de
desenvolvimento contendo o ?isual Basic.NET, ?isual C##.NET, ?isual C#.NET entre
outras ferramentas 'teis. Furante a autoria deste curso, a verso 6778 ! est saindo do
beta 6 e liberada para aquisio em sites e lo!as especiali&adas.
6) @ma segunda opo bem interessante e gratuita bai,ar as vers-es E+pre. Estas
so vers-es redu&idas das principais ferramentas presentes na verso completa e
possuem funcionalidades bsicas. inda assim se tornam uma opo atraente, uma ve&
que a verso E,press do ?isual C# vem com um ambiente completo de
desenvolvimento para as mais variadas aplica-es, entre elas, aplica-es com interfaces
grficas. s vers-es E,press podem ser bai,adas no endereo
$ttp=LLlab.msdn.microsoft.comLe,press.
7) Bai,ar apenas o 2FJ, dispon*vel em
$ttp=LLmsdn.microsoft.comLnetframe/or0Ldo/nloads. s vers-es usadas nos e,emplos
deste curso so M.M e 6.7. 5 2FJ tem o taman$o de M7N%b e contm tudo que voc<
precisar para escrever, testar e distribuir seus aplicativos. documentao da
plataforma tambm inclu*da. Dembre>se de que esta opo fornece apenas os
compiladores de lin$a de comando. ?oc< no ter acesso a editores visuais para
desenvolver formulrios e outras solu-es.
Este curso no cobre a instalao do 2FJ nem do ?isual 2tudio.NET. Esta deciso
baseia>se no fato de entendermos que a tecnologia muda to rapidamente. @ma
informao escrita $o!e ! estar desatuali&ada aman$. No entanto, o leitor encontrar
um vasto material na internet sobre como bai,ar e instalar as ferramentas mencionadas.
Gualquer que se!a a opo escol$ida, ten$a a certe&a de ser capa& de compilar os
e,emplos deste curso usando a lin$a de comando. Caso a dificuldade insista em
dificultar seu progresso, verifique se o valor=
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215
est presente no (TI de seu sistema. : claro que a verso pode variar, mas em geral a
adio desta lin$a no (TI permitir a voc< invocar o compilador C# e compilar
nossos e,emplos.
(ara testar se 2FJ est funcionando corretamente no seu sistema voc< pode tentar
invocar alguns dos compiladores dispon*veis. (ara testar o compilador C#, abra uma
seo do F52 e emita o comando abai,o=
C:\Docme!ts a!# Setti!$s\%sario&csc
?e!a se voc< obtm uma mensagem semel$ante C mostrada abai,o=
Microsoft '() *isa+ C, 2005 Com-i+er versio! ..00.50/2/.02
for Microsoft '() Wi!#ows '() 2005 Framework versio!
2.0.50/2/
Co-1ri$2t 'C) Microsoft Cor-oratio! 200132005. 4++ ri$2ts
reserve#.
fata+ error CS200.: No i!-ts s-ecifie#
Esta mensagem um sinal de que o 2FJ foi instalado com sucesso e o (TI de seu
sistema est configurado corretamente para locali&ar os compiladores. o contrrio, se a
mensagem e,ibida for semel$ante C mostrada abai,o=
5csc5 !6o 7 reco!2eci#o como m coma!#o i!ter!o
o e8ter!o9 m -ro$rama o-er:ve+ o m ar;ivo em +otes.
voc< dever rever sua instalao ou configurao dos valores disponiveis no (TI do
sistema.
Ferramenta nece8ria para programar em C#
?imos no t.pico anterior que o .NET Orame/or0 2FJ pode ser instalado como parte
do ?isual 2tudio.NET ou algumas de suas ferramentas dispon*veis como vers-es
E,press. 2e voc< conseguir instalar qualquer uma destas op-es, voc< no precisar de
mais nada para programar em C#.
2e voc< optou por instalar apenas o 2FJ, tudo que voc< precisa agora de um editor de
te,to qualquer. Todos os e,emplos deste curso podem ser escritos usando apenas o
Bloco de Notas do ;indo/s e compilados com o compilador C# contido no 2FJ. :
claro que alm do Bloco de Notas voc< encontrar vrios editores gratuitos na internet.
lguns com sinta,e colorida e totalmente integrados com a documentao e o
compilador.
(ara testar se seu ambiente est preparado para o estudo dos pr.,imos cap*tulos, abra
uma !anela de (rompt de Comando e digite o comando=
csc
C2C o comando que invoca o compilador C#. (ressione Enter e voc< dever ver o
resultado mostrado a seguir=
Microsoft '() *isa+ C, 2005 Com-i+er versio! ..00.50215.00
for Microsoft '() Wi!#ows '() 2005 Framework versio!
2.0.50215
Co-1ri$2t 'C) Microsoft Cor-oratio! 200132005. 4++ ri$2ts
reserve#.
fata+ error CS200.: No i!-ts s-ecifie#
?e!a que aqui estamos usando o compilador do ?isual C# 6778 e a verso do
frame/or0 .NET 6.7. Em seguida temos uma mensagem de erro causada pela
aus<ncia do nome do arquivo a ser compilado. (or ora ignoremos esta mensagem.
Nosso ob!etivo verificar se o compilador est funcionando como esperado.
% 9uem ete curo e detina
Este um curso 3$ands>on3, ou se!a, um curso para ser lido em frente ao computador,
e,ecutando cada um dos e,emplos propostos e procurando ir alm dos conceitos
bsicos apresentados. (orm, nada impede que voc< imprima as pginas e as leve para a
praia ou leia>as durante uma viagem. e,peri<ncia t<m nos mostrado que no e,iste
ocasi-es mais prop*cias para memori&ar preced<ncia de operadores, valores m*nimos e
m,imos de tipos de dados numricos e outras quest-es igualmente te.ricas.
Este um curso que se destina tanto a programadores com con$ecimento mdio de
programao quanto aos leitores que esto tendo o primeiro contato com programao e
escol$eram a linguagem C# como ponto inicial. 5s t.picos sobre condi-es de
e,travasamento, convers-es impl*cita e e,plicita de dados assim como condi-es de
erros numricos so de interesse a programadores de todas as linguagens. Festa forma,
podemos di&er que este curso complementa bem o con$ecimento que voc< deve ter
adquirido com a prtica ou com a leitura de outros materiais de n*vel introdut.rio.
& e+emplo e ar9ui:o dipon;:ei para download
Furante a autoria deste curso tomou>se o cuidado de agrupar todos os e,emplos e
demais arquivos e disponibili&a>los para do/nload a partir do site. Essa provid<ncia tra&
vantagens in'meras, entre estas, a possibilidade de se e,ecutar um determinado
e,emplo sem a necessidade de digitar todo o seu c.digo de antemo. 5utra vantagem
que o leitor poder comparar um arquivo ! pronto com aquele que est sendo digitado.
Essa comparao a!uda a eliminar erros de digitao.
(orm, recomenda>se fortemente que voc< digite os e,emplos e trec$os de c.digos
contidos nestas pginas. prtica tem nos mostrado que a l.gica empregada em um
determinado algoritmo s. realmente dominada, a partir do momento que digitamos e
entendemos cada lin$a pertencente ao c.digo proposto.
Ecre:endo< compilando e e+ecutando eu primeiro aplicati:o em C#
Com este t.pico iniciamos oficialmente o lado prtico de nosso estudo da linguagem
C#. Baseado nas instru-es a seguir, voc< aprender a escrever, compilar e e,ecutar um
aplicativo C# que a verso tupiniquim do famoso 3Iello, ;orld3. 5 primeiro passo
abrir o editor que voc< escol$eu para o estudo. Em seguida digite a seguinte listagem=
<< %m -ro$rama =O+:9 M!#o>= em C,
c+ass O+a
?
static voi# Mai!')
?
S1stem.Co!so+e.Write@i!e'=O+:9 M!#o>=)A
B
B
2alve este arquivo com o nome de &la.c em um diret.rio de sua prefer<ncia. : uma
boa idia manter os nomes dos arquivos e diret.rios sempre curtos e sem espaos, visto
que usaremos o (rompt de Comando para navegar pelos diret.rios e invocar o
compilador. No e,iste uma e,ig<ncia de que o nome da e,tenso se!a 3cs3. (oderia ser
qualquer e,tenso, porm, usa>se esta para refletir o nome da linguagem.
ssumindo que voc< ten$a criado um diret.rio c$amado 3C=Pcs$arp3 e que o arquivo
&la.c este!a neste diret.rio, tudo que precisamos fa&er navegar at este diret.rio=
c# c:\cs2ar-
e invocar o compilador C# fornecendo o nome do arquivo a ser compilado=
C:\cs2ar-&csc O+a.cs
2e tudo correr como esperado, voc< ter um arquivo e,ecutvel com o nome de &la.e+e
no mesmo diret.rio do arquivo>fonte. Este arquivo e,ecutvel contm o c.digo %2)D
que poder agora ser e,ecutado sob a ger<ncia do .NET Orame/or0. (ara e,ecut>lo,
basta usar o seguinte comando=
C:\cs2ar-&O+a
5 resultado da e,ecuo, ou se!a, a frase 35la, %undoE3 ser e,ibida no console. 5utra
forma de e,ecutar nosso primeiro aplicativo dar um duplo>clique no arquivo
e,ecutvel. %as, ao fa&ermos isso, o programa e,ecutado e se fec$a de imediato.
(oder*amos conseguir uma pausa no programa anterior fa&endo uso de um recurso
acrescentado na verso 6.7 do frame/or0 .NET, a saber, o mtodo )ead3e#=), que
permite pausar o programa at que uma tecla se!a pressionada. No momento oportuno
este mtodo ser estudado com mais detal$es. penas a titulo de introduo, modifique
o programa anterior para esta nova verso=
<< %m -ro$rama =O+:9 M!#o>= em C,
c+ass O+a
?
static voi# Mai!')
?
S1stem.Co!so+e.Write@i!e'=O+:9 M!#o>=)A
S1stem.Co!so+e.Write@i!e'=Cressio!e ;a+;er tec+a
-ara co!ti!ar...=)A
S1stem.Co!so+e.(ea#De1'tre)A
B
B
Nota do %utor0
5 s*mbolo ser usado com freqQ<ncia nas listagens dos c.digos para
mostrar uma quebra de lin$a que foi inserida por quest-es de espao,
mas que deve ser evitada no c.digo fonte que voc< estiver digitando.
Em caso de d'vidas faa do/nload do arquivo correspondente e
verifique sua estrutura.
2alve este c.digo com o nome &la6.c e compile>o. o e,ecut>lo voc< perceber que
sua e,ecuo terminar apenas quando uma tecla for pressionada. E,perimente e,ecut>
lo tambm usando apenas um duplo>clique no arquivo e,ecutvel. 5 t.pico seguinte fa&
uma analise detal$ada da estrutura desses aplicativos simples que escrevemos. 5s
arquivos &la.c e &la6.c podem ser bai,ados clicando>se nos lin0s correspondentes.
%natomia de uma aplicao C#
C# uma linguagem orientada a ob!etos. Nas pr.,imas partes do curso voc< ter a
oportunidade de aprender as principais funcionalidades de uma linguagem orientada a
ob!etos e aprender tambm porque a abordagem orientada a ob!etos permite o
desenvolvimento de pro!etos mais robustos e de fcil e,panso comparados a pro!etos
desenvolvidos usando linguagens procedurais.
(arte integrante da maioria das linguagens orientadas a ob!etos, a palavra cla tambm
est presente no C#. Na verdade, o mais simples dos programas em C# dever estar
contido em uma classe e esta classe poder conter outras classes como variveis de
membro. Terminologia confusa+ No se preocupe. No momento oportuno discutiremos
estes termos em detal$es. (or ora saiba que todo programa C# dever estar contido em
uma classe, como mostra o trec$o de c.digo seguinte=
c+ass O+a
?
<< vari:veis9 co!sta!tes e m7to#os v6o a;i
B
?oc< poder dar qualquer nome Cs suas classes, desde que obedea Cs regras de
nomeao impostas pela linguagem. Estas regras so discutidas na parte 6. Fiferente de
"ava, o C# no insiste que o nome da classe principal do aplicativo se!a id<ntica ao
nome do arquivo que a contm.
?e!a que ap.s a palavra>c$ave cla voc< tem o nome da classe e uma c$ave de abertura
3R3 e de fec$amento 3S3. costume>se desde ! com estas c$aves de abertura e
fec$amento. Elas so usadas para demarcar blocos de c.digos e geralmente so as
causas mais provveis dos erros que impedem a compilao de um programa.
Cada programa C# tem um ponto de entrada, ou se!a, o trec$o de c.digo que ser
e,ecutado inicialmente e que permitir a e,ecuo dos demais trec$os do programa.
Este ponto de entrada um mtodo Main presente na classe principal do programa.
?e!a este mtodo para o aplicativo que escrevemos anteriormente=
static voi# Mai!')
?
<< o cE#i$o a ser e8ecta#o vai a;i
B
parte 6 descreve este mtodo em detal$es. (or ora, fique ciente que cada aplicativo
C# que voc< escrever dever ter este mtodo na classe principal. 5bserve ainda a
presena das c$aves de abertura 3R3 e fec$amento 3S3. Estas c$aves so parte de todos
os mtodos de uma classe.
Bem, ! sabemos que todo aplicativo precisa estar contido em uma classe. Tambm
sabemos que a classe principal dever ter um mtodo de entrada c$amado Main. Festa
forma, todas as ve&es que nossa verso tupiniquim do 3Iello, ;orld3 e,ecutada,
temos a e,ecuo do mtodo Main e consequentemente uma mensagem escrita no
console=
static voi# Mai!')
?
S1stem.Co!so+e.Write@i!e'=O+:9 M!#o>=)A
B
(or ora o mtodo usado para escrever no console no ser discutido. penas leve
consigo a informao de que >rite(ine um mtodo da classe Conole que permite
escrever os mais variados tipos de dados no console. prenda ainda que a classe
Conole parte do namepace ,#tem.
Como inerir coment8rio em eu programa C#
Comentrios e anota-es so de muita utilidade para a rpida manuteno em
determinados trec$os de um c.digo. Guando estamos escrevendo um programa, temos
toda a estrutura e l.gica em nossa mente. Esta a $ora mais adequada de comentar o
que determinados mtodos reali&am e at mesmo o significado das variveis mais
relevantes. Fias mais tarde, ao revisarmos o c.digo, a l.gica empregada ! no estar
to clara. : neste momento que os comentrios e anota-es mostram seu valor.
Comentrios em C# podem ser escritos de suas formas=
a) Comentrios de apenas uma lin$a usando duas barras 3LL3. ?e!a um e,emplo=
<< Este m7to#o rea+iFa a co!e86o com a re#e
Guando o compilador C# encontra as duas barras 3LL3, automaticamente ele ignora por
completo o restante do conte'do da lin$a.
$) Comentrios de duas ou mais lin$as envolvidos nos s*mbolos 3LT3 e 3TL3. ?e!a um
e,emplo=
<G Este -ro$rama 7 ma #emo!straH6o #e como 7 -ossIve+ sar
a +i!$a$em C, -ara ma!i-+ar os -i8e+s #e ma ima$em. G<
(ara comprovar que o compilador C# realmente ignora estes dois estilos de
comentrios, abra seu editor de te,to e digite a listagem a seguir=
<G Come!tario.cs
Este 7 m a-+icativo em C, ;e mostra
como sar come!t:rios #e ma o mais
+i!2as. G<
c+ass Come!tario
?
static voi# Mai!')
?
<< Escreve ma me!sa$em !o co!so+e
S1stem.Co!so+e.Write@i!e'=%so #e come!t:rios em
C,>=)A
B
B
Este c.digo est dispon*vel no arquivo Comentario.c. Compile>o usando as instru-es
vistas anteriormente. Em seguida e,ecute>o. 5bserve que os comentrios no interferem
na correta compilao e e,ecuo do aplicativo.
"arte 6 00 5ari8:ei< Contante e Tipo de 2ado 00 Introduo
Esta parte discute o uso de variveis e constantes em C#, e suas formas de declarao e
iniciali&ao. Constantes so variveis que t<m seus valores imutveis ap.s sua
iniciali&ao. Fiscutiremos tambm os tipos dados suportados pela linguagem C#.
Entendimento e uo de :ari8:ei em C#
?ariveis representam locais de mem.ria nos quais seus programas podem arma&enar
valores e acess>los eLou modific>los durante a e,ecuo. Confuso+ ?amos analisar
mel$or este cenrio.
Toda ve& que voc< e,ecuta um aplicativo, o sistema operacional carrega as instru-es
deste programa para a mem.ria principal de seu computador. Furante o processamento
das diversas fun-es e clculos, este aplicativo precisa arma&enar valores
temporariamente. 2em entrar em discuss-es tcnicas sobre o funcionamento de
$ard/are e mem.rias, podemos di&er que a mem.ria principal de seu computador
dividida em posi-es de mem.ria, cada posio possuindo um endereo 'nico. ?e!a a
ilustrao a seguir=
5ra, no seria nada prtico acessar estas posi-es de mem.ria usando seus endereos
1representados por valores inteiros $e,adecimais4. Fependendo da quantidade de
mem.ria principal dispon*vel, estes endereos podem c$egar C casa dos bil$-es. Em ve&
disso as linguagens de programao usam apelidos para estas posi-es de mem.ria. Tais
apelidos so con$ecidos como :ari8:ei.
@ma :ari8:el possui cinco atributos muito importantes. 2o eles=
M4 Nome U : o nome que identificar a varivel. Este nome deve ser 'nico dentro de seu
escopo 1espao de atuao4, ou se!a, nada impede que classes e mtodos ten$am nomes
semel$antes Cqueles encontrados em outras classes e mtodos.
6) 5alor U : o valor contido na varivel. ?eremos mais adiante como atribuir ou alterar
os valores contidos em variveis.
7) Tipo U : o tipo de dados que ser arma&enado nas variveis. Tipos de dados podem
ser inteiro, string 1te,to4, n'meros de ponto flutuante, etc. Tipos de dados sero vistos
mais adiante.
?) 5ii$ilidade ou ecopo U : o alcance de visibilidade, ou se!a, os locais a partir dos
quais esta varivel poder ser acessada pelas diversas partes do c.digo. discusso
sobre escopo de variveis ser adiada at a nossa analise de classes, mtodos e
estruturas de repetio.
@) Endereo U Cada varivel possui um endereo 'nico. Este atributo ter sua
importVncia destacada quando abordarmos c.digo no seguro 1unafe code4 usando
ponteiros.
gora que ! sabemos o suficiente sobre variveis, vamos escrever um aplicativo
e,emplificando seu uso. Considere a listagem a seguir=
si!$ S1stemA
c+ass *ariaveis
?
static voi# Mai!')
?
i!t va+orA
va+or J 10A
Co!so+e.Write@i!e'=O va+or 7: ?0B=9 va+or)A
va+or J 20A
Co!so+e.Write@i!e'=O va+or foi a+tera#o -ara: ?0B=9
va+or)A
B
B
Compile este e,emplo e observe o resultado de sua e,ecuo. ?oc< ter as seguintes
mensagens=
O va+or 7: 10
O va+or foi a+tera#o -ara: 20
?amos entender o que aconteceu aqui. Fentro do mtodo Main temos a declarao de
uma varivel do tipo inteiro c$amada :alor. Em seguida atribu*mos o valor M7 C esta
varivel. Tipos de dados sero vistos mais adiante. 5 operador de atribuio ser
apresentado na parte W. lin$a seguinte fa& uso do mtodo >rite(ine da classe
Conole para e,ibir o valor desta varivel no console=
Co!so+e.Write@i!e'=O va+or 7: ?0B=9 va+or)A
qui temos uma construo que merece muita ateno. 5bserve o s*mbolo R7S dentro
das aspas ao redor do te,to a ser e,ibido. Este s*mbolo um lugar de marcao para os
valores das variveis locali&adas ap.s a v*rgula. tente para o fato de que voc< poder
ter um n'mero ilimitado de nomes de variveis ap.s a v*rgula e seus valores podero ser
e,ibidos usando R7S, RMS, R6S e assim por diante.
quarta lin$a do c.digo=
va+or J 20A
atribui um novo valor C varivel :alor. (ara finali&ar, uma nova c$amada ao mtodo
>rite(ine e,ibe o novo valor no console.
% diferena entre declarao e definio de :ari8:ei
(ara um perfeito entendimento e uso de variveis, necessrio perceber uma sutil
diferena entre declarao e definio de variveis. ?e!amos o significado de cada
uma nas lin$as seguintes.
declarao de uma varivel informa o compilador sobre seu nome e seu tipo. ?e!a
uma lin$a de c.digo que declara uma varivel c$amada idade=
i!t i#a#eA
definio ou inicialiAao de variveis ocorre quando as clulas de mem.ria
necessrias ao arma&enamento destas variveis so alocadas. ?e!a, por e,emplo, um
trec$o de c.digo que declara uma varivel e em seguida a iniciali&a=
i!t i#a#eA
i#a#e J 20A
Fependendo do conte,to em que uma varivel declarada, o compilador a iniciali&a
automaticamente com um valor padro para o tipo de dados. (orm, variveis locais
nunca so iniciali&adas automaticamente. @ma varivel local uma varivel declarada
dentro de mtodos e alguns outros blocos de c.digo. (ara demonstrar como o
compilador C# se comporta quando uma varivel local declarada, mas ainda no
definida 1iniciali&ada4, vamos escrever o seguinte aplicativo=
si!$ S1stemA
c+ass *ariaveis
?
static voi# Mai!')
?
i!t i#a#eA
Co!so+e.Write@i!e'=I#a#e: ?0B=9 i#a#e)A
B
B
Este c.digo est dispon*vel no arquivo 5aria:ei6.c. E,perimente compila>lo e ver a
seguinte mensagem de erro=
*ariaveis2.cs'K9L/): error CS01M5: %se of !assi$!e# +oca+
variaN+e 5i#a#e5
Esta mensagem de erro ocorreu porque a variavel idade foi declarada dentro do mtodo
Main do aplicativo e, portanto, uma varivel local. ?ariveis locais devem sempre ser
iniciali&adas antes de serem usadas.
&$er:ao
C# permite que a declarao e definio de uma varivel se!am feitas
em apenas uma lin$a. ssim, perfeitamente legal escrever o trec$o
de c.digo seguinte=
i!t i#a#eA
i#a#e J 20A
em uma forma mais redu&ida=
i!t i#a#e J 20A
Como uar contante em C#
?imos no t.pico anterior que variveis podem ter seus valores alterados durante a
e,ecuo do programa. E,iste um tipo de varivel que no permite que seu valor se!a
alterado ap.s sua definio. Em C# esta varivel declarada com a palavra>c$ave
cont. ?e!a um e,emplo de declarao e iniciali&ao de uma constante cu!o valor um
numero inteiro=
const int idade X W7Y
?amos escrever um aplicativo que demonstra o que acontece quando tentamos alterar o
valor de uma constante declarada e ! iniciali&ada=
si!$ S1stemA
c+ass Co!sta!tes
?
static voi# Mai!')
?
co!st i!t i#a#e J L0A
i#a#e J 05A << casa erro #e com-i+aH6o
Co!so+e.Write@i!e'=I#a#e: ?0B=9 i#a#e)A
B
B
2alve esta listagem como Contante.c. o tentarmos compilar este c.digo obtemos a
seguinte mensagem de erro=
Co!sta!tes.cs'K95): error CS01L1: T2e +eft32a!# si#e of a!
assi$!me!t mst Ne a variaN+e9 -ro-ert1 or i!#e8er
Esta mensagem nos di& que o lado esquerdo de uma operao de atribuio deve ser
uma :ari8:el, propriedade ou inde+er. (ropriedades e inde,ers sero vistos nas
pr.,imas partes do curso.
)egra e dica para a ecol!a de nome de :ari8:ei e contante
gora que voc< ! sabe como usar variveis e constantes em seus programas C#, $ora
de aprender um pouco sobre as regras impostas pela linguagem em relao aos nomes
que voc< poderia escol$er para seus identificadores=
a) 5 nome de um identificador pode conter apenas letras, d*gitos e o caractere de
sublin$ado 1Z4Y
$) 5 primeiro caractere deve obrigatoriamente ser uma letra. inda que o caractere de
sublin$ado se!a permitido, seu uso no recomendado devido ao fato de tornar o c.digo
mais dif*cil de ser entendidoY
c) 5 C# diferencia min'sculas de mai'sculas. Festa forma, CD)ENTE, Cliente e cliente
so identificadores distintosY
d) (alavras>c$ave no podem ser usadas como identificadores. 5 t.pico a seguir lista
todas estas palavras em ordem alfabtica.
(ara reforar estas regras ve!a uma lista de identificadores considerados vlidos=
i!t va+orA
stri!$ O!omeC+ie!teA
f+oat *a+orTota+A
#oN+e aLA
s2ort !meroOco!taA
5s identificadores a seguir so considerados invlidos=
stri!$ ,!omeDoC+ie!teA
f+oat 1O*a+orA
i!t Pame!toA
E,iste um consenso entre programadores e autores que os nomes de constantes devam
ser escritos usando apenas letras mai'sculas. Essa pratica comum nas linguagens C,
C## e "ava. Com freqQ<ncia voc< ver este estilo de nomeao sendo aplicado tambm
em C#. Oique C vontade para escol$er seu estilo.
s observa-es nestas pr.,imas lin$as no so e,ig<ncias, mas, uma forma de
estimular o leitor a se adequar ao estilo de programao de vrios programadores
e,perientes ao redor do mundo. primeira observao o uso de letras min'sculas para
os nomes de variveis. Esta pratica comum nas linguagens C, C## e "ava. 2e o nome
da varivel for composto de mais de uma palavra, voc< pode adotar o que con$ecido
como notao Camel. Em tal notao o nome da varivel seria nomeCliente 1com a
primeira palavra iniciando com letras min'sculas e as demais palavras iniciando com
letras mai'sculas4.
Guando se trata de nomes de classes, mtodos, interfaces e outros elementos da
linguagem C#, comum a adoo da notao "acal. Neste estilo a inicial de cada
palavra escrita com letra mai'scula. ssim, uma classe que representa um relat.rio de
vendas poderia ser nomeada )elatorio5enda. Este curso adota a notao Camel para
variveis e constantes e a notao "acal para classes, interfaces e demais elementos.
"ala:ra-c!a:e e pala:ra reer:ada da linguagem C#
(alavras>c$ave so palavras que t<m um significado especial para o compilador.
(alavras reservadas so palavras que no esto em uso agora, mas $ a c$ance de que
estas possam ser inclu*das na linguagem posteriormente. Em todo caso, voc< no poder
usar nen$uma das palavras listadas abai,o para nomear variveis e constantes em seus
c.digos. Esta lista de palavras>c$ave consta da documentao da linguagem C# presente
no frame/or0 .NET verso M.M.
abstract event ne/ struct
as e,plicit null s/itc$
base e,tern ob!ect t$is
bool false operator t$ro/
brea0 finallH out true
bHte fi,ed override trH
case float params tHpeof
catc$ for private uint
c$ar foreac$ protected ulong
c$ec0ed goto public unc$ec0ed
class if readonlH unsafe
const implicit ref us$ort
continue in return using
decimal int sbHte virtual
default interface sealed volatile
delegate internal s$ort void
do is si&eof /$ile
double loc0 stac0alloc
else long static
enum namespace string
Tipo de dado numBrico
gora que voc< ! sabe como declarar variveis e constantes, $ora de saber quais os
tipos de dados que voc< pode usar eu seus aplicativos. Nos e,emplos anteriores vimos
que uma varivel declarada seguinte o modelo=
Ti-oO#eO#a#os !omeO#aOvari:ve+
Em alguns de nossos e,emplos aprendemos a declarar variveis do tipo inteiro usando a
palavra c$ave int. int parte de uma lista de tipos con$ecidos como $uilt-in t#pe, ou
se!a, tipos de dados pr>definidos na linguagem.
5s tipos de dados em C# podem ser divididos em quatro categorias= integrai, nCmero
de ponto-flutuante, decimal e $oolean.
Na categoria dos tipos de dados integrais 1tipos que no apresentam partes fracionrias4
temos os constantes na tabela seguinte=
Tipo Fai+a de 5alore Taman!o
sbHte >M6N at M6[ N bits
bHte 1sem sinal4 7 at 688 N bits
c$ar 1unicode4 @#7777 at @#ffff M9 bits
s$ort >W6.[9N at W6.[9[ M9 bits
us$ort 1sem sinal4 7 at 98.8W8 M9 bits
int >6.M\[.\NW.9\N at 6.M\[.\NW.9\[ W6 bits
uint 1sem sinal4 7 at \.6]\.]9[.6]8 W6 bits
long
>].66W.W[6.7W9.N8\.[[8.N7N at
].66W.W[6.7W9.N8\.[[8.N7[
9\ bits
ulong 1sem sinal4 7 at MN.\\9.[\\.7[W.[7].88M.9M8 9\ bits
Com certe&a o leitor deve estar se perguntando qual a real necessidade de se con$ecer
a fai,a de valores poss*veis e a quantidade de bits ocupados por um determinado tipo de
dados. E qual a diferena entre um tipo sinali&ado 1$#te4 de um tipo no sinali&ado
1$#te4+
ra&o pela qual este curso apresenta tais informa-es ficar clara C medida que voc<
progredir com seus estudos, no somente da linguagem C#, como tambm de outras
linguagens e tcnicas de programao. 5 ap<ndice 32istemas de Numerao3 mostra
a voc< os passos necessrios para converter valores entre os sistemas decimais, binrio,
octal e $e,adecimal. Oique C vontade para consultar este ap<ndice caso a e,plicao que
faremos a seguir se torne um pouco confusa neste estgio do estudo.
)nicialmente tomemos o valor M77 no sistema de numerao decimal. Convertendo este
valor para o sistema de numerao binrio temos MM77M77. 2upon$a que decid*ssemos
arma&enar este valor em uma varivel do tipo $#te 1com sinal4. 5ra, como sabemos
que este tipo de dados ocupa N bits, ou se!a, M bHte de mem.ria, ter*amos o cenrio
reprodu&ido na figura seguinte=
Dembre>se do clculo= 9\ # W6 # \ X M77. Como podemos ver na figura, o bit mais
significativo 1na cor cin&a4 deste bHte usado para sinali&ar se o valor positivo ou
negativo. 2e o bit mais significativo for 7, valor positivo. 2e for M, o valor negativo.
Ento, como este bit tem essa funo e,clusiva para os tipos de dados sinali&ados,
resulta que teremos apenas [ bits para arma&enar os valores dese!ados. ssim, se
tivermos todos estes [ bits com valores M e apenas o bit mais significativo com o valor
7=
7MMM MMMM
c$egaremos C concluso de que o valor m,imo a ser arma&enado realmente M6[ 19\ #
W6 # M9 # N # \ # 6 # M X M6[4. Tomemos agora o tipo de dados $#te 1sem sinal4. Como
este tipo de dados s. arma&enar valores positivos, no $ a necessidade de se usar o bit
mais significativo como sinali&ador. Em ve& disso, ele considerado parte dos bits de
dados e voltamos novamente a ter N bits C nossa disposio. ssim=
M6N # 9\ # W6 # M9 # N # \ # 6 # M X 688
Com este clculo provamos que o tipo $#te pode realmente arma&enar valores que
variaro de 7 a 688. 5 mesmo clculo pode ser usado para os outros tipos de dados.
E,perimente efetuar este processo com os tipos de dados !ort 1aceita valores positivos
e negativos4 e u!ort 1aceita somente valores positivos4.
?oltemos nossa ateno agora para os tipos de dados capa&es de arma&enar n'meros de
ponto-flutuante, ou se!a, n'meros que cont<m partes fracionrias. C# fornece os tipos
float e dou$le. ?e!a suas caracter*sticas na tabela seguinte=
Tipo Fai+a de 5alore "recio Taman!o
float M.8,M7
>\8
at W.\,M7
WN
[ d*gitos W6 bits
double 8.7^M7
>W6\
at M.[^M7
W7N
M8>M9 d*gitos 9\ bits
(ara que voc< realmente entenda as fai,as de valores e preciso dos tipos de dados float
e dou$le, acrescentamos as seguintes observa-es=
a) M7
WN
equivale a multiplicar o valor M7 por ele mesmo W[ ve&es. 5 resultado ser o
numero M seguido de WN &eros. M7
>\8
equivale a dividir o valor M7 por ele mesmo \\
ve&es. 5 resultado ser uma v*rgula seguida pelo numero M precedido de \\ &eros.
$) preciso de um tipo de dados a quantidade de d*gitos que podero ser
representados como casas decimais, ou se!a, a quantidade de d*gitos significativos ap.s
a v*rgula. 2e o calculo reali&ado e,ceder a quantidade de d*gitos permitidos ap.s a
v*rgula, $aver arredondamento para o inteiro mais pr.,imo.
@se o tipo de dados dou$le quando voc< estiver reali&ando clculos que e,igem um
pouco mais de preciso no tocante Cs casas decimais. 5 tipo de dados float usado
quando um poss*vel arredondamento no trar resultados indese!ados ao resultado final.
E,iste, no entanto, uma opo quando o clculo e,ige uma preciso levada ao e,tremo,
por e,emplo, em aplica-es financeiras. (ara estes clculos o C# nos fornece o tipo de
dados decimal. ?e!a suas caracter*sticas na tabela seguinte=
Tipo Fai+a de 5alore "recio Taman!o
decimal M.7,M7
>6N
at [.],M7
6N
6N d*gitos M6N bits
& tipo de dado c!ar< tring e referDncia
Na tabela dos tipos integrais 1tipos que no suportam partes fracionrias4 tivemos a
incluso do tipo de dados c!ar. incluso deste tipo na tabela citada se d por quest-es
acad<micas. Na verdade, se voc< tentar atribuir um valor numrico a um c!ar, como no
e,emplo seguinte=
c2ar +etra J 05A
voc< obter, em tempo de compilao, a seguinte mensagem de erro=
C2ar.cs'/91.): error CS00L1: Co!sta!t va+e 5055 ca!!ot Ne
co!verte# to a 5c2ar5
Esta mensagem nos di& que o valor \8 no pode ser convertido para um c$ar. @ma
alternativa efetuar uma converso e,plicita de dados usando um artif*cio con$ecido
como cating 1e que ser estudado mais adiante4. ?e!a uma nova verso do e,emplo
anterior=
c2ar +etra J 'c2ar) /1A
o e,ecutar esta lin$a de c.digo o valor [M convertido para o caractere @nicode
correspondente e ele atribu*do C varivel letra. (ara que voc< ve!a o resultado,
considere a listagem seguinte=
using 2HstemY
class Caractere
R
static void %ain14
R
c$ar letra X 1c$ar4 [MY
Console.;riteDine13 letra = R7S3, letra4Y
S
S
Este c.digo est dispon*vel no arquivo C!ar.c. Compile>o e, ao e,ecuta>lo voc< ter o
seguinte resultado=
4 +etra 7: Q
Caracteres em C# ocupam M9 bits 16 bHtes4. )sso quer di&er que seus programas podero
e,ibir caracteres cu!os c.digos variaro de 7 at 98.8W8, ou se!a, os caracteres e
s*mbolos da maioria das linguagens ! con$ecidas. 5 ap<ndice B 3Con!unto de
Caracteres 2C))3 servir como refer<ncia quando voc< precisar consultar o c.digo
decimal que representa um determinado caractere.
5 tipo de dados c!ar usado quando precisamos trabal$ar com te,to de forma
separada, ou se!a, um caractere por ve&. Guando dois ou mais caracteres precisam ser
representados, entra em cena um tipo de dados comum a quase todos os aplicativos !
desenvolvidos. Este tipo de dados se c$ama tring.
5 tipo de dados tring um tipo de refer<ncia, ou se!a, todas as ve&es que uma varivel
deste tipo declarada em seus programas, o que temos na verdade uma refer<ncia a
um ob!eto que encapsula um con!unto de caracteres. %as, como ob!etos sero vistos
mais adiante, vamos apenas escrever um e,emplo que demonstra seu uso. Considere a
listagem seguinte=
si!$ S1stemA
c+ass @eitra
?
static voi# Mai!')
?
stri!$ !omeA
Co!so+e.Write@i!e'=Di$ite se !ome:=)A
!ome J Co!so+e.(ea#@i!e')A
Co!so+e.Write@i!e'=Se !ome 7: ?0B=9 !ome)A
B
B
Compile este c.digo e e,perimente e,ecuta>lo. ?oc< ver uma mensagem solicitando
que digite seu nome. o digitar seu nome e pressionar Enter uma nova mensagem
confirma o valor informado. ?amos ver como isso aconteceu.
5 primeiro passo foi declarar uma varivel do tipo tring=
stri!$ !omeA
Em seguida temos uma c$amada ao mtodo >rite(ine da classe Conole para e,ibir a
mensagem que sugere a digitao do nome=
Co!so+e.Write@i!e'=Di$ite se !ome:=)A
5 pr.,imo passo obter o valor que foi digitado. )sso feito com o mtodo )ead(ine
da classe Conole, que atribui C varivel nome< todo o conte'do digitado pelo usurio
antes de pressionar a tecla Enter=
!ome J Co!so+e.(ea#@i!e')A
(ara finali&ar e,ibimos o resultado=
Co!so+e.Write@i!e'=Se !ome 7: ?0B=9 !ome)A
C# no aplica restri-es C quantidade de caracteres que podem estar contidos em uma
string. documentao oficial nos informa que esta quantidade pode variar de 7 C 6
bil$-es de caracteres @nicode. 2e sabemos que cada caractere ocupa M9 bits 16 bHtes4,
ento podemos afirmar que nossas strings podero ser to longas quanto a mem.ria
principal dispon*vel suportar.
ntes de prosseguirmos ten$a em mente que tring um tipo de dados refer<ncia a
ob!etos. 5utros tipos de refer<ncia so o$Eect, cla, interface e delegate. Estes tipos
sero apresentados mais adiante.
Entendendo o tipo de dado $ool
5 tipo de dados $ool usado quando queremos atribuir apenas os valores true ou fale
a uma varivel. @ma contrao da palavra $oolean 1presente em muitas linguagens4,
este tipo ocupa apenas um bit de mem.ria e seu uso pode ser e,emplificado na listagem
seguinte=
si!$ S1stemA
c+ass Roo+ea!
?
static voi# Mai!')
?
Noo+ a-rova#o J treA
Co!so+e.Write@i!e'=Foi a-rova#o: ?0B=9 a-rova#o)A
B
B
Este c.digo est dispon*vel no arquivo 'oolean.c. o e,ecut>lo temos o seguinte
resultado=
Foi a-rova#o: Tre
E,perimente alterar o valor da varivel aprovado para false e ve!a o resultado.
(iterai
Este t.pico aborda literai e a importVncia de se entender e usar corretamente este
recurso, presente em praticamente todas as linguagens de programao. Cabe, no
entanto, uma observao. ?oc< no precisa, obrigatoriamente, ler o conte'do deste
t.pico antes de prosseguir com o estudo das demais partes. %as, caso o faa,
importante escrever e compilar alguns e,emplos a fim de entender o funcionamento de
cada literal apresentado e observar o comportamento do compilador C# em algumas
situa-es que passariam despercebidas aos ol$os dos iniciantes em programao.
@m literal um valor que definimos quando escrevemos nosso c.digo, ou se!a, o
oposto de um valor que poderia ser calculado e atribu*do a uma varivel em tempo de
e,ecuo. Festa forma, estivemos usando literais na maioria dos e,emplos apresentados
at este momento. 5bserve o seguinte trec$o de c.digo=
Noo+ a-rova#o J treA
qui true um literal do tipo $ool 1boolean4 sendo atribu*do C varivel aprovado.
5utro e,emplo de literal poderia ser um literal string, mostrado a seguir=
stri!$ siteA
site J =4r;ivo #e CE#i$os=A
Dembre>se de que um literal string pode conter seqQ<ncias de escape 1ilustradas mais
adiante neste t.pico4. Festa forma, podemos causar uma quebra de lin$a em uma string
de forma bem fcil. ?e!a um e,emplo=
stri!$ frase J =NSmero 1\!NSmero 2=A
sa*da deste e,emplo ser=
NSmero 1
NSmero 2
Como podemos ver, uma quebra causada pela insero da seqQ<ncia 3Pn3 no ponto
onde dese!amos que a quebra de lin$a ocorra.
Guando falamos de literais do tipo boolean e string, tudo muito simples e sob controle.
ateno deve ser redobrada quando estamos lidando com literai integrai e de
ponto-flutuante. Comecemos com os literais integrais. (rimeiramente ve!a o que
acontece quando tentamos atribuir um valor maior que aquele permitido a um
determinado tipo de dados=
N1te va+or J 000A
5ra, como sabemos que o m,imo valor que pode ser arma&enado em uma varivel do
tipo bHte 688, de se esperar que esta definio fosse re!eitada pelo compilador, uma
ve& que o literal \77 no m*nimo do tipo s$ort. E isso que acontece. ?e!a a
mensagem de erro de compilao que nos e,ibida=
Nmero.cs'/91.): error CS00L1: Co!sta!t va+e 50005 ca!!ot
Ne co!verte# to a 5N1te5
E,istem algumas regras bem fceis de serem entendidas quando estamos lidando com
literais integrais. ?amos a elas=
4) Diterais integrais podem ser definidos em dois tipos de sistemas de numerao=
decimal e $e,adecimal. (ara definir um literal integral em $e,adecimal, seu valor
dever ser precedido pela seqQ<ncia 37,3. ?e!a um e,emplo=
i!t va+or J 080LA
o e,ibirmos o valor da varivel usando a forma que ! con$ecemos, veremos que o
valor e,ibido 9[, ou se!a, o valor $e,adecimal convertido para decimal antes de ser
e,ibido. Nos pr.,imos cap*tulos voc< aprender como e,ibir valores de variveis em
$e,adecimal usando as op-es de formatao de string.
6) 2e o valor do literal for maior que aquele suportado pelo tipo de dados da varivel a
qual este valor ser atribu*do, um erro de compilao ocorrer. 5 maior valor definido
para um literal integral no poder ser superior ao maior valor suportado pelo tipo
ulong.
7) 2e o literal no possui sufi,o, ele ser do primeiro tipo que suportar seu valor,
seguindo a ordem= int, uint, long, ulong.
?) 2e o literal possui o sufi,o @ ou u, ele ser do primeiro tipo que suportar seu valor,
seguindo a ordem= uint, ulong. Dembre>se de que os sufi,os @ ou u so usados para
definir um literal integral sem sinal. ?e!a um e,emplo=
i!t va+or J 10L%A
@) 2e o literal possui o sufi,o D ou l 1letra 3D3 min'scula4, ele ser do primeiro tipo que
suportar seu valor, seguindo a ordem= long, ulong. (ara facilitar a leitura do sufi,o,
encora!amos o uso apenas do sufi,o D 1a letra 3D3 min'scula se parece muito com o
numero M4. ?e!a um e,emplo deste tipo de literal=
+o!$ va+or J M2L0M5@A
94 2e um literal possui os sufi,os @D, @l, uD, ul, D@, Du, l@ ou lu, ele ser do tipo
ulong.
(or ora voc< no encontrar nen$uma aplicao prtica dos conceitos apresentados
nesta parte do te,to. (orm, procure, sempre que puder rever estas anota-es. Elas sero
muito 'teis durante o seu desenvolvimento. ?e!a agora uma das situa-es clssicas de
erro de compilao envolvendo literais. 5bserve o trec$o de c.digo a seguir=
f+oat va+or J M.2A
primeira vista esta definio est correta. Temos um literal de ponto flutuante sendo
atribu*do a uma varivel do tipo float. (orm, ao tentarmos a compilao obtemos a
seguinte mensagem de erro=
*a+ores.cs'/91K): error CS0MM0: @itera+ of t1-e #oN+e
ca!!ot Ne im-+icit+1 co!verte# to t1-e 5f+oat5A se a! 5F5
sffi8 to create a +itera+ of t2is t1-e
Esta mensagem de erro nos avisa que um literal do tipo dou$le no pode ser
implicitamente convertido para o tipo float. E sugere que usemos o sufi,o O ap.s o
valor do integral. Oaamos isso ento=
f+oat va+or J M.2FA
o tentar compilar o c.digo novamente vemos que a mensagem de erro se foi. Festa
e,peri<ncia conclu*mos que=
4) 2e o literal de ponto>flutuante no possuir sufi,o, ou possuir os sufi,os F ou d, ele
ser do tipo double.
6) 2e o literal possuir os sufi,os O ou f, ele ser do tipo float.
7) 2e o literal possuir os sufi,os % ou m, ele ser do tipo decimal.
Fe posse desta informao, nem precisamos de muito esforo para saber que o trec$o de
c.digo=
#ecima+ va+or J 00.5A
resultar em um erro de compilao, mesmo sabendo que uma varivel do tipo decimal
pode perfeitamente acomodar o valor de um literal do tipo dou$le.
Diterais do tipo c!ar podem ser definidos usando>se aspas simples em torno do
caractere dese!ado. ?e!a um e,emplo=
c2ar +etra J 545A
5utra forma de fornecer um valor a um literal c!ar usar valores inteiros na fai,a que
vai de 7 at 98.8W8 1lembre>se de que o tipo c$ar ocupa M9 bits na mem.ria e no possui
sinal4. ?e!a um e,emplo=
c2ar +etra J 'c2ar ) 100A
Esta tcnica foi e,emplifica no t.pico 35s tipos de dados c$ar, string e refer<ncia3.
E,iste, no entanto, uma outra forma de atribuir valores a um literal c$ar. Esta forma no
to freqQente e consiste em atribuir ao literal o caractere dese!ado usando>se um valor
$e,adecimal que representa o valor @nicode do caractere. Este valor dever ser
precedido por 3Pn3. ?e!a um e,emplo=
c2ar +etra J 5\00M/5A
qui o literal letra conter a letra 3g3. 5 ap<ndice 32istemas de Numerao3 mostrar
a voc< como converter entre os sistemas de numerao decimais e $e,adecimais.
(ara finali&ar vamos analisar as seqQ<ncias de escape dispon*veis na linguagem C#.
?e!a a tabela a seguir=
,e9uencia Nome do Caractere 5alor Fnicode
P_ spas 2imples 7,776[
P3 spas Fuplas 7,7766
PP Barra )nvertida 7,778C
Pb Aetrocesso 7,777N
Pf vano de (gina 7,777C
Pn Nova Din$a 7,777
Pr ?oltar 7,777F
Pt Tabulao Iori&ontal 7,777]
Pv Tabulao ?ertical 7,777B
Esta tabela de seqQ<ncias de escape tem sua importVncia compreendida quando
precisamos e,ibir frases que contm aspas simples ou duplas. (or e,emplo, se
quisssemos e,ibir a seguinte frase=
E!t6o e+a fa+o: =Esto mito ca!sa#a=
maneira usual seria escrever um trec$o de c.digo assim=
stri!$ frase J =E!t6o e+a fa+o: =Esto mito ca!sa#a==A
(orm, ao tentarmos e,ecutar tal c.digo temos uma mensagem de erro semel$ante C
mostrada a seguir=
testes.cs'/9LK): error CS1002: A e8-ecte#
testes.cs'/951): error CS1002: A e8-ecte#
testes.cs'/95.): error CS1002: A e8-ecte#
Esta mensagem de erro no a!uda em nada. %as, ! sabemos o que fa&er. Basta
3escapar3 as aspas internas. ?e!a como o c.digo deve ser escrito=
stri!$ frase J =E!t6o e+a fa+o: \=Esto mito ca!sa#a\==A
Como uar corretamente o mBtodo Main com ou em argumento
Todo programa C# tem um ponto de entrada, que um mtodo Main definido na classe
principal, ou se!a, a classe responsvel por controlar o flu,o de e,ecuo do programa.
Em todos os e,emplos que escrevemos at este momento, vimos o mtodo %ain com a
seguinte assinatura=
static voi# Mai!')
?
<< mais +i!2as #e cE#i$o a;i
B
palavra tatic um modificador que pode ser usado com classes, mtodos, variveis,
etc, e ser abordado mais adiante. penas para que voc< no siga desinformado, saiba
que um mtodo definido com este modificador pode ser acessado sem que uma
instVncia da classe na qual o mtodo foi definido precise ser criada.
palavra :oid usada para indicar que o mtodo no retorna nen$um valor ap.s a sua
e,ecuo. Como voc< aprender mais adiante, mtodos podem retornar todos os tipos
de dados que estudamos, incluindo referencias a tipos de dados definidos pelo usurio.
: comum em C# uma assinatura do mtodo Main que retorna um inteiro. ?e!a um
e,emplo=
si!$ S1stemA
c+ass *oi#CorI!t
?
static i!t Mai!')
?
Co!so+e.Write@i!e'=Troca!#o voi# -or i!t=)A
retr! 0A
B
B
Este c.digo est dispon*vel no arquivo 5oid"orInt.c. ?e!a que agora o mtodo Main
retorna um valor inteiro. 5bserve tambm o uso da instruo return como ultima lin$a
a ser e,ecutada. Em C e C##, ao retornarmos o valor 7 para o sistema operacional
estamos informando>o que a e,ecuo e encerramento do programa ocorreu sem
maiores problemas. E,perimente agora substituir int por :oid novamente. o tentar
compilar o c.digo voc< ver a seguinte mensagem de erro=
*oi#CorI!t.cs'K95): error CS012/: Si!ce 5*oi#CorI!t.Mai!')5
retr!s voi#9 a retr! ke1wor# mst !ot Ne fo++owe# N1 a!
oNTect e8-ressio!
Esta mensagem nos di& que, uma ve& que o metodo Main est retornando :oid 1nada4, a
palavra>c$ave return no deve ser seguida por uma e,presso. Troque=
retr! 0A
por
retr!A
e compile o c.digo novamente. ?oc< ver que agora a mensagem de erro no e,ibida.
Esta e,peri<ncia nos mostra que, quando um mtodo define :oid como seu tipo de
retorno, o compilador far o poss*vel para que esta regra se!a obedecida.
: poss*vel usar o mtodo Main para fornecer valores ao programa via lin$a de
comando. (ara tanto voc< deve usar a seguinte assinatura=
static voi# Mai!'stri!$UV ar$s)
?
<< mais cE#i$o a;i
B
qui nos temos um parVmetro para o mtodo Main. Este parVmetro um arraH do tipo
string. rraHs so estruturas de dados que consistem em itens de dados relacionados do
mesmo tipo e inde,ados com valores inteiros maiores ou igual a 7. 5s valores
fornecidos na lin$a de comando so separados por espaos e acessados usando>se
args`7a, args`Ma, args`6a e assim por diante. ?e!a um e,emplo onde o usurio informa
seu primeiro nome e idade na lin$a de comando do programa=
si!$ S1stemA
c+ass @i!2aComa!#o
?
static voi# Mai!'stri!$UV ar$s)
?
Co!so+e.Write@i!e'=Se -rimeiro !ome 7 ?0B e vocW
tem ?1B a!os=9 ar$sU0V9 ar$sU1V)A
B
B
Este c.digo est dispon*vel no arquivo (in!aComando.c. p.s sua compilao
e,perimente e,ecuta>lo usando os seguintes argumentos=
@i!2aComa!#o 4$sto 21
?oc< obter o seguinte resultado=
Se !ome 7 4$sto e vocW tem 21 a!os
E,perimente informar seu nome completo e a idade na lin$a de comando. (oderia ser
algo assim=
@i!2aComa!#o 4$sto Sa!tos #e SoFa 21
p.s a e,ecuo voc< concordar comigo que o resultado no foi o que espervamos.
%as pode ser contornado. Basta informar o nome completo entre aspas duplas. ssim=
@i!2aComa!#o =4$sto Sa!tos #e SoFa= 21
rraHs e as tcnicas usadas para evitar erros em tempo de e,ecuo, como aquele
causado quando voc< tentar e,ecutar estes e,emplos recentes sem fornecer valores na
lin$a de comando, sero estudados mais adiante.
Introduo G interface gr8fica do C#
t este ponto de nosso estudo, todos os resultados da e,ecuo de nossos
e,emplos foram e,ibidos no console, em modo te,to. creditamos que este se!a o
momento adequado para fa&ermos uma introduo Cs capacidades grficas do C#. 5
pr.,imo programa mostrar a voc< como fa&er uso da classe Meage'o+ 1que est sob
o namespace ,#tem.>indow.Form4 para e,ibir mensagens mais amigveis em seus
programas. Considere a listagem a seguir=
si!$ S1stem.Wi!#ows.FormsA
c+ass Me!sa$em
?
static voi# Mai!'stri!$UV ar$s)
?
stri!$ frase J =Este 7 m e8em-+o #o so #a
c+asse Messa$eRo8=A
Messa$eRo8.S2ow'frase9 =Me 4-+icativo=)A
B
B
Este c.digo est dispon*vel no arquivo Menagem.c. Compile>o e e,perimente
e,ecut>lo. ?oc< a seguinte cai,a de mensagem=
5 mtodo ,!ow da classe Meage'o+ possui uma grande variedade de parVmetros.
(ara este e,emplo escol$emos os parVmetros que permitem definir os te,tos para a
mensagem e para o t*tulo da cai,a de mensagem=
Messa$eRo8.S2ow'stri!$ te8t9 stri!$ ca-tio!)
Como e,erc*cio recomendamos que voc< investigue os demais parVmetros deste mtodo
na documentao da plataforma .NET.