Você está na página 1de 49

TECNOLOGIAS PARA APLICAES WEB

WEB AULA 1
Unidade 1 Introduo Plataforma .NET
Framework e a Linguagem C#

VDEO AULA 01

Um novo modelo de desenvolvimento
A partir dos anos 90 a internet comeou a mudar a forma como as
organizaes se comunicavam. Aplicaes tradicionais como
processadores de texto e planilhas eletrnicas eram criadas para
funcionar individualmente, acessando dados que estavam
armazenados na prpria maquina que o aplicativo era executado. A
maioria dos novos softwares desenvolvida para funcionarem de
forma distribuda, acessando bases remotas e provendo servios para
outros programas, chamados de aplicativos clientes. Como resultado
o primeiro objetivo dos novos softwares suportar o
compartilhamento de informaes pela rede e a distribuio delas
atravs de mensagem eletrnica, e-mail e at mesmo redes sociais.
Basicamente o novo modelo de desenvolvimento de software est
deixando de apenas criar funcionalidades bsicas de um sistema
isolado para a criao de servios que possibilitam gerar solues
para uma grande quantidade de aplicaes.

O .NET Framework possibilita o desenvolvimento de uma plataforma
robusta para criao de aplicativos para desktop, celulares e Internet.
Torna o desenvolvimento para internet uma tarefa fcil como nunca
foi anteriormente.
Fcil publicao e manuteno
Aplicaes podem ser criadas utilizando diferentes tecnologias:
Saiba mais: Viso geral do .NET Framework
http://msdn.microsoft.com/pt-br/library/hh425099.aspx
Web pages
Web Services
Bibliotecas (DLLs)
Windows Forms
Console Application
O .NET Framework torna fcil a tarefa de publicao, na maioria dos
cenrios, basta copiar o aplicativo e seus componentes em uma pasta
e execut-lo. Isso possvel porque o .NET Framework localiza e
carrega todas as dependncias necessrias que o aplicativo precisa,
mesmo se houverem diferentes verses do mesmo componente no
sistema.
As configuraes ps-instalao tambm so um ponto importante e
que muito bem tratado pelo .NET Framework. Configuraes de
segurana, conexes com banco de dados e parmetros da aplicao
podem ser facilmente alterados sem a necessidade de compilar a
aplicao novamente, isso porque o .NET Framework trabalha com
essas configuraes em um modelo baseado em arquivos. Um
arquivo de configurao um arquivo XML que pode alterar o
comportamento de uma aplicao. Por exemplo, o administrador do
sistema pode configurar a aplicao para utilizar apenas uma verso
de um componente instalado no sistema, ou at mesmo alterar o
caminho de um banco de dados se o mesmo foi migrado para outro
local, tudo isso de uma forma flexvel e sem impactar o sistema.
Segue abaixo o modelo de um arquivo de configurao utilizado no
.NET:

Vdeo: XML Teoria e Prtica

http://www.youtube.com/watch?v=I-me4ipqpxY
Cada um dos ns do xml acima contm uma configurao que pode ir
de uma referncia de um recurso utilizado na aplicao at uma
string de conexo utilizada para conectar no banco de dados.
Elementos do .NET FRAMEWORK
O .NET Framework consiste em trs camadas bsicas:
Common Language Runtime
Commom Type System
.NET Class Library
A seguir vamos conhecer cada uma dessas camadas.
Common Language Runtime
O Common Language Runtime (CLR) uma camada entre a aplicao
e o sistema operacional. O CLR simplifica o desenvolvimento de uma
aplicao e reduz a quantidade de cdigo que os desenvolvedores
tm que escrever pois disponibiliza uma grande quantidade de
recursos, dentre eles podemos citar o gerenciamento de memria e
de threads (paralelismo), ciclo de vida de componentes e tratamento
de erros. Um dos maiores trunfos do CLR a forma transparente
como ele prov todos os recursos citados, no importando a
linguagem de programao utilizada e retirando qualquer esforo
requerido do programador.
O CLR tambm responsvel por compilar o cdigo antes do mesmo
ser executado. Ao contrrio de produzir uma compilao binria,
como a maioria dos compiladores faz, o compilador do .NET produz a
representao do cdigo em uma linguagem comum para o .NET
Framework, chamada de Microsoft Intermediate Language (MSIL),
mais conhecido com IL. Quando o cdigo executado pela primeira
vez , o CRL invoca um compilador especial chamado Just In Time
(JIT), que transforma o cdigo IL em um executvel especfico para o
tipo do processador que a aplicao ser executada. Como todas as
linguagens do .NET Framework tm como resultado a mesma
compilao, todas tm o mesmo desempenho. Isso quer dizer que
um programa escrito em Visual Basic .NET (VB.NET) pode trabalhar
da mesma forma que um programa desenvolvido em C Sharp (C#).
A imagem abaixo ilustra como funciona a compilao de um
programa desenvolvido em uma das linguagens do .NET Framework,
no caso o C#:
Figura - Processo de Compilao do .NET

Fonte: Introduction... (2013)
Commom Type System
O Commom Type System (CTS) um componente do CLR que
mantm um conjunto padro de tipos de dados, cada um com
caractersticas e comportamentos em comum. A grande vantagem
por trs do CTS a possibilidade de trabalhar com os mesmos tipos
de dados utilizando qualquer uma das linguagens do .NET. Por
exemplo, se uma aplicao em C# precisa se comunicar com um
componente desenvolvido em VB.NET ela no precisar conter
nenhum cdigo adicional para conseguir se comunicar com o
componente.
O CTS permite que cada linguagem de programao do .NET utilize
os tipos de dados especificados na linguagem, o compilador do .NET
converte o tipo de dados utilizado para o tipo de dados definido no
CTS. Tambm possvel utilizar na programao diretamente o tipo
definido no CTS.
A tabela a seguir mostra cada um dos tipos definidos no CTS:

.NET Class Library
O .NET Class Library a camada que prov uma grande quantidade
de classes que executam as mais diversas funes, por exemplo,
efetuar operaes matemticas, manipular arquivos XML ou bancos
de dados.
Para facilitar o uso das classes as mesmas foram dividas em pacotes
chamados de namespaces. O namespace raiz do .NET Class Library
chamado de System, que contm classes bases e tipos de dados,
como a String, o Int16, Console e Array.
Exemplos de namespaces do .NET Class Library:
System.Data.SqlClient: Contm classes para trabalhar com o banco
de dados SQL Server;
System.IO: Contm classes para trabalhar com arquivos e dados
serializados em memria.
A grande vantagem de se trabalhar com o .NET Class Library a
possibilidade de utilizar todos os recursos das classes nas diferentes
linguagens do .NET Framework, facilitando na publicao da
aplicao, pois o .NET Class Library est incluso em todas as verses
do .NET Framework.
Tecnologias unificadas
At agora, foi abordado como funcionam os componentes internos do
.NET Framework. As tecnologias, listadas a seguir, so as diferentes
formas disponveis para utilizar todos os recursos da plataforma.
Vdeo: .NET Framework e seus componentes

http://www.youtube.com/watch?v=zbDsiOYlBtk
Visual Studio
Windows Forms
ASP.NET

Visual Studio
O Visual Studio uma IDE (Integrated Development Environment)
para desenvolvimento utilizando qualquer uma das linguagens
contidas no .NET Framework. O Visual Studio disponibiliza recursos
para trabalhar com diversas linguagens no mesmo ambiente. Contm
ferramentas para DEBUG, designers para HTML, XML, banco de dados
e cdigos de servidor. Alm disso conta com IntelliSense, recurso que
completa o cdigo, garantindo que o desenvolvedor evite erros, alm
de adicionar um alto ganho na produtividade.
Veja na tabela abaixo alguns recursos do Visual Studio:

Windows Forms
Windows Forms o nome dado para o conjunto de classes que
contm funcionalidades que suportam criar aplicaes desktop
tradicionais, que contm uma interface grfica para interao do
usurio. O Windows Forms torna fcil o desenvolvimento de sistemas
para o usurio final utilizando qualquer uma das linguagens do .NET
Framework. O Visual Studio permite o desenvolvimento Windows
Forms arrastando controles em uma ferramenta visual, descartando a
necessidade de criar a parte grfica da aplicao utilizando cdigo,
recurso esse chamado de drag-and-drop (arrastar e soltar).

Desenvolvimento Windows Forms no Visual Studio
Saiba mais: Introduo ao Windows Forms

http://msdn.microsoft.com/pt-br/vbasic/ms789117.aspx
ASP.NET
Para o desenvolvimento de aplicaes WEB o .NET framework dispe
do ASP.NET, uma arquitetura de desenvolvimento criada
especificamente para criar aplicaes WEB poderosas com alta
produtividade.
O ASP.NET dividido em vrias tecnologias, entre ela o ASP.NET Web
Forms, ASP.NET MVC e Web Services.
ASP.NET Web Forms
Desenvolvedores que no tm familiaridade com o desenvolvimento
para WEB podem perder muito tempo para descobrir como validar um
simples campo de e-mail em um formulrio de contato. Uma
validao pode ser executada tanto no lado cliente, como no lado
servidor. Decidir qual lado seguir pode ser complicado pelo fato de
que cada uma das abordagens tem suas vantagens e desvantagens,
algumas podem no ficar explicitamente visveis no momento do
desenvolvimento se no houver a ateno necessria. Se a validao
for feita no lado cliente utilizando Javascript, deve ser considerado o
risco do navegador do usurio no suportar Javascript, ou at mesmo
estar desativado. Dessa forma os dados seriam enviados sem estar
devidamente validados. Se os dados forem validados no servidor, o
tempo para enviar esses dados e obter uma resposta pode frustrar o
usurio, ou seja, a aplicao poder ser segura mas ir pecar na
usabilidade.
O Web Forms simplifica todos os processos da arquitetura cliente-
servidor, pois tem como objetivo facilitar a entrada de
desenvolvedores desktop no ambiente WEB, disponibilizando recursos
como o drag-and-drop para adicionar controles em uma pgina e
editar suas caractersticas visualmente.

Ambiente de desenvolvimento em ASP.NET no Visual Studio
ASP.NET MVC
Vdeo: Introduo ao ASP.NET

http://msdn.microsoft.com/pt-br/asp.net/gg252004.aspx
O ASP.NET MVC um framework para trabalhar com o padro de
projeto Model-View-Controller, permitindo o controle total sobre o
que enviado para o cliente e utilizando todo o poder do ASP.NET e
do .NET Framework. uma excelente plataforma para trabalhar com
desenvolvimento dirigido por testes por no conter cenrios
complexos como o ciclo de vida de pginas baseado em eventos
como o ASP.NET Web Forms. Tambm introduziu no ASP.NET a
possibilidade de configurar rotas para criar endereos amigveis,
permitindo assim um melhor desempenho na disponibilizao de
contedo atravs de mecanismos de busca.
Saiba mais: Padro MVC

http://msdn.microsoft.com/pt-br/magazine/cc337884.aspx
Web Services
Um Web Service uma aplicao que expe funcionalidades na web
atravs de mtodos. Web Services so desenvolvidos para serem
consumidos por outras aplicaes e no tm a inteno de interagir
diretamente com o usurio final. Web Services tornam fceis a
criao de recursos para serem acessados remotamente. Aplicativos
clientes podem invocar os mtodos de um Web Service como se eles
estivesses definidos na prpria aplicao.
VDEO AULA 02


Linguagem C#
A linguagem C# foi criada pela Microsoft especificamente para a
plataforma .NET. A criadora da linguagem descreve a mesma como
simples, moderna, orientada a objetos, fortemente tipada (apesar
dos tipos dinmicos introduzidos na verso 4) derivada do C e C++.
Algumas pessoas por sua vez diriam que a linguagem tambm
derivada do Java, por algumas similaridades em seu design.
Sintaticamente o C# muito parecido com C++ e Java. Algumas
palavras chaves so iguais, blocos de cdigo so marcados com
chaves e as instrues so terminadas com ponto e vrgula. A
primeira impresso ao ver um bloco de cdigo escrito em C# que
ele muito parecido com C++ e Java. Apesar de toda essa
similaridade o C# muito mais simples de ser absorvido do que o
C++, mas tendo quase o mesmo nvel de dificuldade do Java. Seu
design apesar de similar, mais moderno que as outras linguagens
citadas.
Algumas das principais caractersticas do C#:
Suporte total a programao orientada a objetos, incluindo
Herana e Interfaces, mtodos virtuais, e sobrecarga de
operadores;
Uma grande quantidade de tipos de dados bases, como tipos
numricos inteiros e fracionados;
Suporte para gerar automaticamente documentao em XML;
Limpeza de memria automtica de recursos no utilizados;
Acesso total a Class Library do .NET Framework, e fcil acesso
as APIs do Windows;
Ponteiros e direto acesso a memria so permitidos, mas a
linguagem foi projetada de uma forma para que no seja
necessrio o uso desses recursos;
Suporte a propriedades e eventos;
C# pode ser utilizado para criar qualquer tipo de aplicao
dentro da plataforma .NET, como pginas em ASP.NET e Web
Services.
Muitos dos recursos citados tambm so suportados por outras
linguagens do .NET Framework, como o VB.NET e o Visual C++, mas
deve ser levado em considerao que o C# foi desenvolvido do zero
para o .NET. Sendo assim, tem um suporte mais completo desses
recursos, ao mesmo tempo em que sua sintaxe mais fluda para sua
utilizao.
O que preciso para escrever e rodar cdigo C#
O .NET Framework, atualmente na verso 4.5, necessrio para
executar aplicaes escritas em qualquer linguagem do .NET.
Apesar do C# poder ser escrito em qualquer editor de texto de
terceiros, altamente recomendado a utilizao da IDE oficial, o
Visual Studio, pois contm ferramentas poderosas que possibilitam
um ganho considervel na produtividade.
C# Bsico
Agora que foram apresentados os principais recursos da linguagem
C#, veremos como utiliz-los, compilando o cdigo de exemplo
abaixo:

Saiba mais: Compilador C#

http://msdn.microsoft.com/pt-br/library/vstudio/2fdbz5xd.aspx
Compilando e rodando o programa
O cdigo acima pode ser compilado executando pela linha de
comando o compilador do C# (csc.exe) contra o arquivo (que deve
ser salvo com extenso .cs), como mostrado abaixo:
csc primeiro_programa.cs
Nota: O compilador do C# pode ser encontrado no seguinte caminho:
{drive}\Windows\Microsoft.NET\Framework\{verso do .net
framework}
Exemplo:
C:\Windows\Microsoft.NET\Framework\v4.0.30319
Para poder compilar um cdigo direto da linha de comando, deve ser
verificado se as ferramentas de linha de comando do .NET foram
instaladas no sistema.
Depois de compilado ser gerado um arquivo .exe que pode ser
executado da linha de comando ou atravs do Windows Explorer
como qualquer outro executvel.
A sada do programa (considerando que o usurio se chama Joo)
ser a seguir:

C# e sua sintaxe
Vamos observar alguns detalhes sobre a sintaxe do C#. Como em
outras linguagens, linhas de comando no C# so terminadas com
ponto e vrgula, e podem continuar em mltiplas linhas sem
necessidade de um caractere para informar essas continuaes, como
vemos a seguir:

Para comentar uma linha basta utilizar duas barras (//). Para vrias
linhas deve ser iniciado com barra e asterisco ( /*) e terminar com a
mesma combinao ao contrrio ( */):

Saiba mais: Comentrios com XML

http://msdn.microsoft.com/pt-br/library/vstudio/b2s063f7.aspx
Todos esses aspectos mostram as similaridades do C# com o C++ e
o Java.
As primeiras linhas do cdigo anterior comeam com a utilizao de
namespaces, um recurso utilizado para agrupar classes que tm
responsabilidades similares. Os namespaces do C# so equivalentes
aos namespaces do C++ e os packages do Java. A palavra chave
namespace seguida de chaves declara em qual namespace uma
classe est contida.
A palavra chave using informa ao compilador em qual namespace
deve ser procurado para encontrar classes que foram referenciadas
em seu cdigo mas no foram definidas no mesmo namespace. Using
no C# equivalente palavra chave import do Java e using
namespace do C++.
Veremos no cdigo abaixo outra utilizao dos namespaces:

N cdigo acima foi adicionado uma instruo using pois foi
referenciada uma classe contida no namespace System. Vale
ressaltar que a maioria das operaes efetuadas no C# dependem
das classes bases do .NET. Nesse caso, foi utilizada a classe Console
para imprimir uma mensagem na linha de comando. O C# no tem
nenhum comando para efetuar essa operao.
Como a maioria dos programas em C# utilizam classes e outros
elementos do namespace System, uma boa prtica adicionar uma
instruo using para esse namespace em todos os arquivos.
Depois disso foi definido uma classe chamada Program, como ela foi
definida no namespace ConsoleApplication1, correto afirmar que
seu nome completo ConsoleApplication1.Program.
Classes
Como no Java, tudo no C# deve estar contido em uma classe.
Classes no C# so similares a classes no Java e C++. A declarao
da classe se d com a palavra chave class, seguida do nome da
classe e das chaves. Todo cdigo referente associado a classe deve
estar dentro das chaves, como mostrado no exemplo abaixo:

No exemplo anterior foi declarado um mtodo chamado Main. Todo
executvel desenvolvido em C# (Console, Windows) deve ter um
ponto de partida. Esse o papel do mtodo Main, ser o primeiro
mtodo a ser executado ao abrir o executvel.
Um mtodo no C# tem o seguinte formato:

Saiba mais: Orientao a Objetos com C#

http://msdn.microsoft.com/pt-br/library/cc580626.aspx
Por Exemplo:

Primeiro devem ser definidos os modificadores do mtodo que
servem para especificar o nvel de acesso do mtodo. No exemplo
anterior foram utilizadas as palavras chaves public e static. A
palavra chave public define que o mtodo pode ser chamado de
qualquer lugar, inclusive fora da classe que foi definido. J a palavra
chave static indica que o mtodo no poder ser invocado de um
objeto (instncia da classe) e sim diretamente da classe. Logo depois
deve ser definido o tipo de retorno do mtodo, no caso void para
informar que o mtodo no retornar nada. No exemplo, o mtodo
no recebe parmetros. Por fim, so definidas as instrues do
mtodo:

A instruo acima declara uma varivel do tipo int chamada x. Deve
ser observado que o compilador no deixar essa varivel ser
utilizada a no ser que ela seja inicializada.
Assim que declarada, pode ser inicializada utilizando o operador de
atribuio igual ( = ):
x = 20;
Tambm possvel declarar e inicializar uma varivel ao mesmo
tempo:
int x = 20;
Se vrias variveis so declaras e inicializadas ao mesmo tempo,
todas as variveis sero consideradas do mesmo tipo:
Int x = 50, y = 100;
No exemplo anterior as duas variveis sero do tipo int.
No possvel declarar variveis de diferentes tipos ao mesmo
tempo:
int x = 20;
bool y = false;
int x = 10, bool y = false; // no compilar
A inicializao de variveis mostra o nvel de segurana do C#.
Nenhuma varivel pode ser utilizada sem primeiro ser inicializada. Em
algumas linguagens o compilador mostraria apenas uma mensagem
de alerta, mas o compilador do C# trata essa situao como um erro.
Isso previne a leitura de lixo em memria deixado por outros
programas.
O C# utilizada dois diferentes mtodos para assegurar que variveis
sempre sero inicializadas antes de serem utilizadas:
Variveis que so definidas como atributos em classes e
estruturas, se no inicializadas explicitamente, so
automaticamente inicializadas com valores padres do tipo que
foram declaradas no momento que so criadas.
Variveis locais de um mtodo devem ser explicitamente
inicializadas antes de qualquer instruo que ir utilizar o valor
da varivel. A inicializao no precisa ser feita no momento da
declarao da varivel, mas o compilador verificar todos os
caminhos possveis do mtodo e gerar um erro caso o valor da
varivel esteja sendo acessado sem ser inicializado
previamente.
Vdeo: Variveis no C#

http://www.youtube.com/watch?v=0dVOVeT0rTg
O cdigo abaixo ilustra as afirmaes sobre inicializao de variveis:

Ao compilar o cdigo acima, ser gerado o seguinte erro:

O erro informa que a varivel maiorIdade est sendo utilizada sem
ser inicializada, isso porque caso a idade digitada seja menor que 18
nenhum valor ser atribudo varivel, e no haver um valor para
ser testado na instruo if.
Considere a seguinte instruo:
Pessoa objeto;
No C# essa linha de cdigo declara uma varivel que pode apontar
para um objeto do tipo Pessoa, mas o objeto ainda no foi criado,
logo a varivel no aponta para nada. Qualquer chamada para um
mtodo ou propriedade a partir dessa varivel ir gerar um erro.
Para instanciar um objeto no C# deve ser utilizada a palavra chave
new. Primeiro criada a varivel como no exemplo anterior e logo
em seguida instanciado um objeto;
No final fica assim: Pessoa objeto = new Pessoa();
FRUM:

Com o conhecimento adquirido sobre a plataforma .NET e a
linguagem C#, cite as vantagens que voc identificou ao utilizar essa
tecnologia.
RESUMO:
Vimos nesta unidade algumas das tecnologias que compreendem o
.NET Framework, seu padro de funcionamento junto ao sistema
operacional e os diversos tipos de arquiteturas possveis para serem
trabalhadas, como Windows e Web, alm do ambiente de
desenvolvimento Visual Studio. Tambm foi apresentada a linguagem
C#, sua sintaxe e suas similaridades com as linguagens Java e C++.

INTRODUCTION to the C# Language and the .NET Framework2013.
Disponvel em: < http://msdn.microsoft.com/en-
us/library/z1zx9t92.aspx >. Acesso em: 21 fev. 2013.
TIPOS de dados (guia de programao). 2013. Disponvel em: <
http://msdn.microsoft.com/pt-
br/library/ms173104%28v=vs.80%29.aspx >. Acesso em: 28 jan.
2013.
APLLICATTION development in visual studio. 2013. Disponvel em: <
http://msdn.microsoft.com/en-us/library/vstudio/h8w79z10.aspx >.
Acesso em: 28 fev. 2013.
SUGESTO DE LEITURA
SHARP, John. Visual C# 2008 - passo a passo. Porto Alegre:
Bookman, 2008.
LOUREIRO, Henrique. C# 4.0 com visual studio 2010. Lisboa: FCA,
2011.
MSDN. .NET framework application essentials. Disponvel em: <
http://msdn.microsoft.com/en-US/library/vstudio/ms172157 >.
Acesso em: nov. 2012.
MSDN. Introduction to the C# language and the .NET Framework.
Disponvel em: <
http://msdn.microsoft.com/library/vstudio/z1zx9t92 >. Acesso em:
nov. 2012.
WEB AULA 2
Unidade 1 Linguagem C# Avanado

VDEO AULA 03



Inferncia de tipo
Inferncia de tipo utilizada para omitir o tipo da varivel no
momento da declarao. Para utilizar esse recurso no C# utilizada a
palavra chave var. O compilador ir descobrir o tipo da varivel a
partir do momento da inicializao, por exemplo:
var x = 2;
ir se tornar:
int x = 2;
Saiba mais: A lgica da Inferncia

http://pt.wikipedia.org/wiki/Infer%C3%AAncia
Depois de compilado, as duas instrues so iguais.
Veja mais um exemplo:

Apenas deve ser atentando para algumas regras. A varivel deve ser
sempre inicializada no momento da declarao. De outra forma, o
compilador no saberia definir o tipo da varivel. O valor inicializado
no pode ser null como visto abaixo:

Uma vez declarada e inicializada, o tipo da varivel no pode ser
alterado. Diferente do tipo Variant do Visual Basic, a palavra chave
var ir apenas retirar a responsabilidade do desenvolvedor de digitar
o tipo da varivel.
Considere o cdigo:

Vdeo: Introduo ao Visual Basic .NET

http://falandoti.com.br/do-nada-ao-basico-com-visual-basic-net-
parte-1/
O cdigo acima ir gerar o seguinte erro:

O erro informa que no possvel converter implicitamente o tipo
string para int, isso porque a varivel x foi inicializada com o valor 2,
o compilador inferiu o tipo int para esta varivel, logo no possvel
guardar um valor do tipo string.
Escopo de Variveis
O escopo de uma varivel o local do cdigo onde uma varivel pode
ser acessada. No geral, o escopo determinado pelas seguintes
regras:
Um campo ( varivel declarada como membro de classe )
acessvel dentro de qualquer local da classe;
Uma varivel local de um mtodo acessvel apenas no escopo
do mtodo em que foi declarada, assim que o mtodo termina
sua execuo a varivel eliminada;
Uma varivel local declarada dentro de qualquer estrutura de
repetio (while, for) acessvel apenas no escopo do loop.
Problemas de escopo em variveis locais
comum programas utilizarem o mesmo nome de varivel em
diferentes partes do mesmo. No existe nenhum problema nesse
procedimento se as variveis forem criadas em diferentes escopos
para que no haja a possibilidade de ambiguidade. O mais importante
ter em mente que duas variveis com o mesmo nome no podem
estar no mesmo escopo, como mostrado no exemplo abaixo:

O cdigo acima simplesmente imprime na tela os nmeros de 0 a 9, e
depois os mesmos nmeros de 9 a 0, utilizando duas estruturas de
repetio for. importante notar que a varivel i foi declarada duas
vezes no mesmo mtodo. Isso perfeitamente possvel porque a
varivel i foi declarada em estruturas de repetio diferentes, logo
so variveis locais dos loops.
Vejamos outro exemplo:

Se tentarmos compilar o cdigo acima, teremos o seguinte erro:
A local variable named 'j' cannot be declared in this scope
because it would give a different meaning to 'j', which is
already used in a 'parent or current' scope to denote
something else
Isso ocorre porque a varivel J foi declarada antes do bloco for, no
escopo do mtodo Main, e s ser eliminada quando o mtodo
terminar. A segunda declarao de J est errada, pois o bloco for est
contido no mtodo, dessa forma uma varivel J j existe no escopo e
no pode ser declarada novamente.
Problemas de escopo entre variveis locais e campos
Em algumas situaes possvel distinguir duas variveis com o
mesmo nome no mesmo escopo. Nesse caso o compilador permitir a
criao da segunda varivel com o mesmo nome. Isso porque o C#
consegue diferenciar variveis locais (variveis declaradas dentro de
mtodos) de campos ( variveis declaradas a nvel de classe ).
Consideremos o seguinte cdigo:

Saiba como encontrar erros atravs do Visual Studio:

http://msdn.microsoft.com/pt-br/library/vstudio/sc65sadd.aspx
O cdigo acima ir compilar mesmo tendo duas variveis J no escopo
do mtodo Main. Note que a primeira varivel J foi declarada a nvel
de classe e s ser eliminada quando a classe for destruda ( quando
o mtodo Main terminar sua execuo e o programa terminar ). No
exemplo, a varivel J declarada dentro do mtodo Main esconde a
varivel declarada a nvel de classe, e a sada do programa ser o
nmero 50.
Mas e se precisarmos acessar a varivel declarada no nvel de classe?
Nesse caso necessrio utilizar o nome da classe para informarmos
ao compilador que a varivel que ser acessada est declarada a
nvel de classe, como mostrado no cdigo a seguir:

A sada do programa ser o nmero 20.
Constantes
Como o prprio nome diz, uma constante uma varivel cujo valor
no pode ser alterado durante seu ciclo de vida. Para declarar uma
constante basta utilizar a palavra chave const na declarao da
varivel. Uma constante sempre deve ser inicializada no momento de
sua criao:
const int a = 100;
Constantes tem as seguintes caractersticas:
Devem ser inicializadas no momento da declarao e seu valor
no pode ser alterado;
O valor de uma constante deve ser computado em nvel de
compilao, isso quer dizer que no permitido inicializar uma
constante com o valor de uma varivel;
Constantes so implicitamente estticas e no permitido
utilizar a palavra chave static em sua declarao;
Existem pelo menos 2 vantagens na utilizao de constantes em um
programa:
Constantes ajudam a evitar erros. Se em algum local do
programa houver a tentativa de alterao do valor inicializado
na constante o compilador apresentar um erro, no permitindo
tal ao.
Constantes tornam os programas mais flexveis para alterao,
pois vrios locais do programa podem acess-las, e uma
simples alterao em seu valor pode alterar o comportamento
do programa inteiro, poupando tempo e evitando
inconsistncias em sua modificao.
VDEO AULA 04

Tipos de dados pr-definidos no C#
Agora que conhecemos variveis e constantes, veremos melhor os
tipos de dados disponveis no C#. Notaremos que o C# muito mais
rgido quanto utilizao de tipos do que outras linguagens de
programao.
Tipos por Valor e Tipos por Referncia
Antes de descobrir os tipos de dados disponveis no C#, importante
entender que o C# contm duas categorias de tipos de dados:
Tipos por Valor
Tipos por Referncia
A principal diferena entre as 2 categorias que os tipos por valor
guardam o valor diretamente, enquanto os tipos por referncia
guardam uma referncia para onde o valor est alocado. Tipos de
dados que trabalham por valor no C# so basicamente os tipos
menos complexos, como o int, float e bool.
Considere as variveis abaixo:
int i = 123;
string s = ol mundo;
Em memria, a representao das variveis acima funciona dessa
forma:

Ou seja, i guarda o valor no prprio local de memria, j s aponta
para outro local de memria que contm o valor.
Tipos por valor so alocados em um local de memria chamado de
stack, e os tipos por referncia so alocados no heap. importante
saber quando um tipo trabalha por valor ou por referncia pela
diferena presente na atribuio de cada uma dessas categorias. Por
exemplo, int um tipo por valor, isso quer dizer que o cdigo abaixo
ir resultar em dois locais de memria alocando o valor 50:
int i = 50;
int j = i;
Saiba o que so ponteiros na programao:

http://pt.wikipedia.org/wiki/Ponteiro_%28programa%C3%A7%C3%A
3o%29
Porm, considere o cdigo abaixo:

O cdigo instncia um objeto da classe Coordenada. importante
entender que toda classe no C# um tipo que trabalha por
referncia. No cdigo acima apenas um objeto do tipo Coordenada foi
criado. As duas variveis obj e obj2 apontam para o mesmo local em
memria onde est alocado o objeto. Como obj e obj2 so variveis
de um tipo que trabalha por referncia, a declarao das mesmas no
cria um novo objeto, apenas permite apontar para um objeto do tipo
Coordenada. Para criar um objeto necessrio utilizar a palavra
chave new. Como obj e obj2 apontam para o mesmo objeto,
qualquer alterao feita em obj ir alterar obj2, e vice-versa.
Seguindo o comportamento descrito, o cdigo mostrado
anteriormente retornar os valores 30 e 50 respectivamente.
Quando uma varivel de um tipo que trabalha por referncia
possvel indicar que ela no aponta para nenhum objeto atribuindo o
valor null:
Coordenada x = null;
Qualquer acesso a um membro do tipo Coordenada pela varivel
acima ir gerar uma exceo em tempo de execuo.
O CLR implementa um algoritmo para identificar se um objeto contm
referncias para o mesmo. Caso no exista nenhuma varivel
apontando para o objeto ele destrudo e a memria alocada
liberada para uso novamente. Essa tarefa executada por um
mecanismo chamado Garbage Collector.
O C# foi arquitetado dessa forma pois tipos primitivos simples como
o int e bool tm uma melhor performance trabalhando por valor. J
tipos complexos que podem conter vrios campos, como as classes,
tm um melhor desempenho trabalhando por referncia.
Tipos por Valor pr-definidos
Como mencionado na unidade 1, os tipos de dados bsicos pr-
definidos reconhecidos pelo C# no so exatamente da linguagem,
mas sim do .net Framework. Por exemplo, quando declaramos um int
no C#, na verdade estamos criando uma instncia da struct
System.Int32 definidos pelo CTS.
Veremos a seguir uma tabela de mapeamento dos tipos por valor do
C# para os tipos por valor definidos no .net Framework:

Tipos por Referncia pr-definidos
O C# contm dois tipos de dados pr-definidos que trabalham por
referncia, object e string como descrito na tabela abaixo:

O tipo object
Muitas linguagens de programao e hierarquia de classes contm
um tipo base, cujo todos os outros tipos de dados derivam. O C# no
exceo. No C# o tipo object o tipo base para todos os outros
tipos de dados definidos na linguagem, pr-definidos ou criados pelo
usurio. Isso quer dizer que o tipo object pode ser utilizado para
algumas situaes:
Para apontar para objetos de qualquer tipo de dados, por
exemplo, possvel empacotar um objeto que trabalha por
valor para mov-lo do stack para o heap;
til para trabalhar com reflexo, tcnica utilizada quando
precisamos trabalhar com objetos de tipos desconhecidos;
O tipo object implementa alguns mtodos bsicos, como o
Equals, GetType e ToString, uteis em diversas situaes e
disponveis para todos os objetos no C#.
Considere o cdigo abaixo:

Vdeo: Tipo Object
http://www.youtube.com/watch?v=KFE66HfPUFk&feature=youtu.be
Note que foram atribudos valores do tipo int, string e DateTime em
variveis do tipo object, isso perfeitamente possvel pois todos os
tipos no C# herdam de object.
VDEO AULA 05

O tipo string
A palavra chave string no C# mapeada para o tipo System.String
do .net Framework. Esse um tipo de dados muito flexvel em sua
utilizao, operaes como concatenao e cpia so efetuadas
naturalmente.

Apesar da forma de atribuio, string um tipo que trabalha por
referncia. Internamente o tipo string alocado no heap, e no no
stack, e quando uma varivel string atribuda a outra so criadas
duas referncias para o mesmo objeto. Apesar de ser um tipo por
referncia, a string tem alguns comportamentos diferentes dos outros
tipos que pertencem a essa categoria. Por exemplo, quando uma
string modificada criado um novo objeto para representar essa
string, deixando a primeira string intacta.
Considere o seguinte cdigo

Vdeo: Concatenao de Strings

http://youtu.be/ZcU56qW8M4U
A sada desse programa ser:

Alterar o valor da varivel z1 no tem nenhum efeito na varivel z2,
ao contrrio do que seria esperado de um tipo que trabalha por
referncia. O que aconteceu foi que ao atribuir o valor isso uma
string na varivel z1, um novo objeto foi criado. Quando z2 foi
inicializada com o valor de z1, uma referncia ao mesmo objeto
apontado por z1 foi passada para z2. Quando o valor da varivel z1
foi alterado, ao contrrio de alterar a string original, um novo objeto
foi criado e alocado no heap para o novo valor, e a referncia de z1
foi alterada para apontar para esse novo objeto. z2 continuou
apontando para a string original.
Literais do tipo string so criados utilizando aspas duplas ( ), o uso
de aspas simples ( ) no C# utilizado para criar literais do tipo char
e causam erro em tempo de compilao se tentarem ser atribudas a
variveis do tipo string:

Estruturas Condicionais
Estruturas condicionais permitem que um bloco de cdigo seja
executado apenas se uma ou vrias condies forem atendidas. O C#
tem duas estruturas para trabalhar com condies, a estrutura if, que
permite testar se uma condio especfica foi atendida, e o bloco
switch, que permite testar uma expresso com um diferente nmero
de valores.
Estrutura condicional if
O C# herdou a construo if...else do C e C++. A sintaxe dessa
estrutura muita intuitiva para qualquer desenvolvedor que j tenha
programado com uma linguagem procedural:

Se apenas uma instruo ser executada em qualquer uma das
partes condicionais, as chaves no so necessrias.

Se necessrio, um bloco if pode no ter uma bloco else. Tambm
permitido combinar clusulas else if para testar mltiplas condies:
Exemplo:

No h limite para o nmero de else if adicionadas a um bloco if
Estrutura condicional switch
A estrutura switch..case familiar para programadores C++ e Java.
muito til para comparar um argumento com vrias opes.
Para criar o bloco necessrio passar um argumento para o switch
seguido de uma srie de clusulas case. Quando a expresso da
clusula switch encontra o respectivo case o cdigo segue
imediatamente para aquele case. Para cada case deve haver a
instruo break para que o bloco pare de ser executado. Tambm
possvel utilizar um case padro caso nenhum deles seja executado.
O exemplo a seguir testa o valor da varivel x:

Note que os valores dos blocos case so constantes, variveis no
so permitidas.
Estruturas de repetio
O C# disponibiliza quatro estruturas de repetio ( for, foreach,
while, do...while) que permitem executar um bloco de cdigo quantas
vezes for preciso at uma certa condio ser em encontrada. O for,
while e do...while so basicamente iguais aos encontrados no c++.
Estrutura de repetio for
O for um mecanismo para iterar sobre um loop onde testado se
uma condio ainda vlida para poder ser executado novamente. A
sintaxe a seguinte:
For(inicializador; condio; iterador)
Instrues
Onde:
O inicializador uma expresso a ser executada antes do loop
iniciar ( geralmente iniciando uma varivel para servir como
contador);
A condio a expresso a ser testada em cada iterao antes
do loop ser executado;
O iterador uma expresso a ser executada depois de cada
iterao ( geralmente um incremento do contador).
A iterao termina quando a expresso retorna false.
O for um excelente loop para repetir um bloco de cdigo em um
determinado nmero de vezes. O exemplo seguinte mostra um uso
tpico de um bloco for, imprimindo na tela todos os nmeros de 0 a
99:

Vdeo: foreach, uma alternativa ao for:

http://www.youtube.com/watch?v=Ys3_QVaAP5w
No exemplo acima foi declarada uma varivel i do tipo int e
inicializada com o valor 0. Essa varivel ser utilizada como contador
para o loop. A condio testa se o contador menor que 100. Essa
condio retornar true enquanto o contador for menor que 100. O
contador incrementado em cada iterao.
O exemplo retornar o seguinte resultado:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
Estrutura de repetio while
A estrutura de repetio while idntica ao while do C++ e Java. O
while tem uma sintaxe mais simples que o for pois necessrio
apenas uma expresso para utiliz-lo:
While(condio)
Instrues
Diferente da estrutura for, o while geralmente utilizado para repetir
um bloco de cdigo por um nmero de vezes desconhecido no
momento que o loop comea. Uma varivel de controle utilizada e
alterada no interior da estrutura para que a iterao termine:

Estrutura de repetio do... while
O do...while funciona como o while, mas sua condio de parada
testada depois do loop ser executado. Isso quer dizer que o bloco de
cdigo ser executado pelo menos uma vez:

Estrutura de repetio foreach
O foreach uma estrutura que itera sobre cada objeto de uma
coleo, no sendo necessrio trabalhar com ndices. Para que a
estrutura foreach consiga trabalhar com uma coleo ela deve
implementar a interface IEnumerable. Como exemplos de colees no
C# podemos citar arrays, as classes do namespace System.Collection
e colees criadas pelo usurio.
Considere o seguinte cdigo:

Saiba mais: O que so Interfaces

http://www.linhadecodigo.com.br/artigo/2999/entendendo-
interfaces-com-csharp.aspx
O exemplo mostra uma iterao em um vetor de string utilizando a
estrutura foreach. Cada vez que executado o loop a varivel x
alterada para conter um elemento do vetor.
A inferncia de tipo muito utilizada em estruturas foreach:

A varivel x ser do tipo string pois o foreach est iterando sobre um
vetor de strings.
Um ponto importante que deve ser lembrado que os itens da
coleo no podem ser modificados dentro de uma estrutura foreach:

O cdigo mostrado no ir compilar, pois x no pode ser modificado.
FRUM:

Como vimos nesta unidade a linguagem C# tem duas formas bsicas
de tipos de dados, por valor e referncia. Em sua opinio qual o
cenrio ideal para utilizar cada um desses tipos?
RESUMO:
Nesta unidade foram apresentados conceitos primordiais para
desenvolver aplicativos utilizando todas as vantagens que a
linguagem C# pode proporcionar. Vimos que existem diferenas na
escolha do tipo de dados e como esses tipos so gerenciados em
memria. Tambm foram mostradas as estruturas de repetio e
condicionais disponveis na linguagem, sua sintaxe e suas
similaridades com a linguagem C.

BUILT-in types table (C# reference). 2013. Disponvel em: <
http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx >. Acesso
em: 28 fev. 2013.
SUGESTES DE LEITURA
SHARP, John. Visual C# 2008 - passo a passo. Porto Alegre:
Bookman, 2008.
LOUREIRO, Henrique. C# 4.0 com visual studio 2010. Lisboa: FCA,
2011.
MSDN. .NET framework application essentials. Disponvel em: <
http://msdn.microsoft.com/en-US/library/vstudio/ms172157 >.
Acesso em: nov. 2012.
MSDN. Introduction to the C# language and the .NET
Framework. Disponvel em: <
http://msdn.microsoft.com/library/vstudio/z1zx9t92 >. Acesso em:
nov. 2012.