quarta-feira, 26 de agosto de 2009

5 - Introdução à variáveis e operadores: Calculando a média semestral da UNIP em C#

  (Por : Rodrigo Ribeiro da Costa Barbosa - rodrigorcbarbosa@hotmail.com)

  Estou postando este tutorial como uma forma de estudo da aula de segunda-feira (26/08/2009) e também como uma forma de introduzir conceitos que serão amplamente aprofundados a seguir como Variáveis e Cálculos.

Introdução à Variáveis.

  Na faculdade em que estudo, o sistema de cálculo da média semestral se dá da seguinte forma matemática:

  Média semestral = [ (Nota da primeira prova) X ( Peso 3) + (Nota da segunda prova) X ( Peso 3) + (Nota da prova integrada institucional) ] X ( Peso 4)  : 10

De uma maneira mais simplificada, vou atribuir legendas a estes valores aonde:
Nota da primeira prova = np1
Nota da segunda prova = np2
Nota da prova integrada institucional = pii
Média semestral = ms
* Os pesos são valores fixos (constantes) onde para a 1ª e 2ª prova o peso é 3 e para a prova integrada o peso é 4.

 Desta forma , poderemos simplificar nosso cálculo  matemático para:

ms=(np1+np2)x0.3+piix0.4

 Olha só como ficou bonito ! Podemos notar que todos os valores da fórmula que estão em vermelho irão mudar de aluno para aluno, pois sabemos que estes valores podem "VARIAR" de acordo com as notas do aluno em questão. Toda fórmula restante , é uma "CONSTANTE" que nenhum aluno poderá alterar na hora de calcular sua média .

  Quando escrevemos um programa, todas as entradas que serão atribuídas ou modificadas pelo usuário serão denominadas variáveis . Estas variáveis representam uma posição na memória do computador aonde o programa poderá acessá-las ou modificá-los durante sua execução .
  Podemos entender melhor se pensarmos da seguinte forma:
 Se eu lhe peço para guardar meu telefone , você irá armazenar este número na sua memória correto?
 Este número é uma variável que estará assumindo uma posição temporária na sua memória até que você o anote ou decore-o definitivamente pois se não o fizer provavelmente após algum tempo você o esquecerá!
  Já reparou como as informações não salvas em nossos programas são perdidas após o mesmo travar ou desligar sem serem salvos ? Então , o princípio é o mesmo !

 As variáveis possuem algumas propriedades que citarei de modo simplificado e resumido aqui .
  • Nome:  É a identificação da variável pelo programa e nunca devemos ter duas variáveis com o mesmo nome dentro do mesmo escopo de execução no nosso programa.
Ex :   np1=7 ( leia-se : nota da 1º prova igual a sete)
      Onde np1 é o nome atribuido a variável "nota da primeira prova " !
  • Valor : É o conteúdo da nossa variável, este valor pode ser alterado ou modificado pelo usuário! . Mais adiante mostraremos como atribuímos estes valores no programa.
Ex :   np1=7
    Onde 7 é o valor atribuido a nossa variável ( e poderá ser modificado de aluno para aluno, ao menos que todos os alunos da faculdade tirem 7 na primeira prova ! :-)
  • Tipo: É o tipo de váriável em questão. Uma váriável conter valores numéricos, lógicos, de pontos flutuantes , decimais ,strings e objetos ( aprofundaremos o conceito de cada uma delas nos tutoriais seguintes).
  • Visibilidade ou Escopo: São os lugares de onde essa variável será alcançada por outras partes do código, veremos mais sobre isso quando aprofundarmos em classes, métodos e estruturas de repetição.
  • Endereço: Como dito anteriormente, cada variável tem um endereço único que lhe é atribuído na memória, esse conceito será aprofundado quando estudarmos ponteiros .
  Agora já sabemos o suficiente para trabalharmos com os primeiros programas utilizando variáveis :-)

   O código dado em sala de aula foi o seguinte (comentado e com leves alterações):

using System;

namespace calculamedia
{
    class programa1
      {
          static void Main()
             {
                // 1 - Declarando as variáveis:
                float np1, np2, npii, ms;
                  // 2 - Atribuindo valor as variáveis
                  np1 = 6.5f;                                       
                  np2 = 9.4f;
                  npii = 3.0f;
                  // 2.1 - Calculando a média e atribuindo o resultado a variável ms:
                  ms=(np1+np2)*0.3f+npii*0.4f;
                    // 3 - Exibindo o resultado :
                    Console.WriteLine("Nota da Prova 1 = {0}",np1);
                    Console.WriteLine("Nota da Prova 2 = {0}",np2);
                    Console.WriteLine("Nota da Prova Integrada = {0}",npii);
                    Console.WriteLine("Media Semestral = {0}",ms);
                    Console.ReadLine();
              }
        }
}
 

  Agora vamos entender oque aconteceu !

 Na parte 1 , declaramos as variáveis ou seja, estamos dizendo para nosso programa quem são e com quais tipos de variáveis estamos trabalhando. Quem são as variáveis do nosso programa fica fácil identificar, são elas: np1, np2, npii ms  mas você talvez tenha estranhado o argumento "float" no início da linha !.
  Prometo que farei um tutorial só aprofundando nos tipos de variáveis em breve, por ora, basta saber que float é um tipo de variável numérica que irá trabalhar com até 7 casas decimais ,afinal nossa nota pode ser um valor inteiro ( ex: 6 ) ou decimal ( ex: 8,5).  Então nesta linha estamos dizendo (a grosso modo) ao nosso programa :
 As variaveis do nosso programa serão np1, np2, npii, ms e elas são do tipo float !

  Na parte 2 ,  estamos atribuindo os valores de nossas variáveis. Estamos dizendo quanto o aluno obteve em cada prova. Mas nesse ponto se você estiver atento pode se perguntar !
  "Poxa ... mas você não disse que as variáveis são valores cujo o usuário atribui no programa? Porque estamos atribuindo diretamente no código ?"
   É que neste momento, estamos apenas entendendo o conceito, este código ainda tem muito a evoluir e por enquanto é somente um "projeto" de programa em que trabalharemos durante os seguintes tutoriais quando aprenderemos novos recursos da linguagem C# :-) .
   Podemos reparar que em cada um dos valores de cada uma das variáveis temos um "f" no final, isso não requer nenhuma explicação aprofundada, pois é apenas uma notação que terá que ser usada para valores numéricos do tipo float.
  Se você estiver afiado, vai notar que na verdade a parte 2.1 faz parte da dois , pois ainda estamos atribuindo valor a variável "ms" (média semestral) . O resultado do programa também é uma variável !
e neste caso é necessário efetuar um cálculo que resultará neste valor !
O cálculo está descrito da seguinte maneira:
ms=(np1+np2)*0.3f+npii*0.4f ;
Vamos lembrar da fórmula matemática que montamos lá em cima ?
ms=(np1+np2)x0.3+npiix0.4

 São praticamente iguais ! A diferença está nos OPERADORES ARITMÉTICOS  !
Afinal porque esta diferença?
 De modo exemplificado podemos dizer que o compilador do C# ( entre outras linguagens ) entende o operador matemático de multiplicação "x" como uma letra (caractere) e "." como um separador de casas decimais, logo teriam  que arrumar um subistituto para ele. Sendo assim, foi definido o uso do "*" para operações de multiplicação ! No resto da fórmula continuam todos os operadores iguais ( += ).
 Assim como os tipos de variáveis, também aprofundaremos nos operadores posteriormente,ok?
Desse modo fica fácil enxergar que estamos utilizando as variáveis atribuídas antes (np1, np2, pii) dentro de uma formula matemática  (mf=(np1+np2)*0.3f+npii*0.4f ;) para definir o valor da média semestral (mf ).

   Na parte 3 , estamos utilizando a função "WriteLine" para mostrar um texto pré definido juntamente com o valor das variáveis do programa. A princípio pode parecer confuzo este método de atribuição mas explicando isso ficará claro como um cristal  ;-).

Vejamos:
Console.WriteLine("Nota da Prova 1 = {0}",np1); 
Esta é uma parte dó código que diz o seguinte
Console.WriteLine --> Escreva na tela do console :
("Nota da P1 =      --> Nota da P1 =
{0}",np1); --> E substitua o valor de {0} pelo valor da variável que está sendo definida a seguir. Ou seja : 6.5 !
A saída deste comando no console ficará : "Nota da Prova 1 = 6,5"

Agora vamos supor que nosso programa fosse informar todas as notas de umas vez só !
Vamos ver como ficaria o código...

Console.WriteLine("Nota da P1 = {0} - Nota da P2 = {1} - Nota da Prova Integrada = {2} - Média semestral = {3}",np1,np2,npii,ms);

O C# começa a contar as variáveis a partir do "0" então na sequencia lógica ele chama as variáveis do seguinte modo:
{0} para  np1
{1} para  np2
{2} para  npii
{3} para  ms

Agora deve ter ficado cristalino o conceito né ?

A saída deste comando no console será:

Nota da P1 = 6,5 - Nota da P2 = 9,4 - Nota da Prova Integrada = 3,0 - Média semestral = 5,97

Espero que tenham entendido o conceito inicial de variáveis ( declarações e atribuições), constantes e operadores :-)

Abraço e até a próxima !

terça-feira, 25 de agosto de 2009

4 - Identação e Comentários em C#

  Todo bom texto deve ter uma boa formatação. Imagine se comprássemos um livro que viesse sem parágrafos, margens e tabulações, ou para piorar, que fosse utilizada somente uma única linha para escrevê-los ! Ler já não é o esporte preferido da maioria das pessoas, se fosse desse modo seriam raros os leitores pelo mundo e mais raros ainda os que conseguiriam entender a contextualidade do livro :-) .
  Em qualquer linguagem de programação (e não somente C#) é necessário uma organização semelhante para facilitar a escrita, interpretação e correção do código programado. Esta organização do código é denominada Identação.
  Analizando um código simples poderiamos obter umas situação assim:

using System;namespace meuprograma{class programa1{static void Main(){Console.WriteLine("Ensopado de TI !");}}}

   E acreditem ! Esse código não apresentaria erros !
   Como citado em tutoriais anteriores, um dos erros mais comuns na hora de compilar um programa, é a questão de abertura e fechamento das chaves, sem a identação com certeza estes erros seriam mais frequentes e a escrita do código muito mais tortuosa!
   Então vejamos o codigo a seguir :

using System;
namespace meuprograma
{
class programa1
{
static void Main()
{
Console.WriteLine("Ensopado de TI !");
}
}
}

 Opa ! A leitura desse código já pode ser promovida de horrível para razoável !
Mesmo controlando a  estrutura por linhas, ainda não fica muito clara a noção de hierarquia de execução e
qual das chaves abre quem ou fecha oquê. Vejamos abaixo como esse código ainda pode evoluir !

using System;

namespace meuprograma
{
 |     class programa1
 |          {
 |           |      static void Main()
 |           |      {
 |           |       |   Console.WriteLine("Ensopado de TI !");
 |           |      }
 |          }
}

 No caso, nosso compilador não deixará noso código colorido :-). Mas as cores são somente para notar melhor a estrutura dos espaçamentos e das chaves.
 Fica claro que a 1ª chave (rosa) está abrindo "{" para a classe ("programa1"), a 2ª chave (verde) abre para  (static void Main) e a 3ª chave (azul) para ("Console.WriteLine"). Como tudo na Vida precisa ter um começo e um fim , precisamos encerrar o que começamos e de forma alinhada fechamos cada chave aberta com seu par !
 Abrimos 3 chaves e fechamos 3 e desse modo estruturado com toda certeza fica muito mais claro a interpretação do código :-).

 Inserindo Comentários em C#.

   Está é uma dica simples mas poderosa dentro das linguagens de programação !!!
Os comentários são textos que podem ser escritos junto com o código sem serem interpretados pelo compilador, ficando ocultos quando o programa final é executado e podendo ser lidos apenas no código fonte. Eles podem ter diversas funções como:
  • Lembrar o programador a utilidade de certa parte do código.
  • Inserir informações a respeito da escrita do código ( data, versão, criação, alteração, autor)
  • Documentar os processos no código para outro programador.
  • etc...
 Os comentários podem ser de dois tipos.
  
    1- Comentários de apenas uma linha que utilizam o "// " Exemplo:

// Programa criado em 26/08/2009 por Rodrigo Ribeiro C. Barbosa.
using System;

namespace meuprograma
{
         class programa1
         {
               static void Main() // Aqui é o ponto de partida !
                     {
                              Console.WriteLine("Ensopado de TI !"); 
                     }
         }
}
// Versão do programa: 4.844.45.7.7888.9.Beta RC31 :-)


      Todo o texto que seguir após as barras  "//"  será ignorado pelo compilador . Simples não?

  2- Agora imagine que você seja uma pessoa que goste de detalhar um pouco mais e não se conforme em comentar em apenas uma linha (principalmente as mulheres!), seria um tanto quanto chato escrever as barras no começo de cada linha, então pensando em vocês foi criado o recurso "/*" para abrir o comentário e "*/" para fechá-lo! Vejamos um exemplo:

using System;
namespace meuprograma
{
         class programa1
             {
                   static void Main()
                       {
                              Console.WriteLine("Ensopado de TI !");
                             /* blá blá blá blá blá blá blá blá blá blá blá 
                                 blá blá blá blá blá blá blá blá blá blá blá 
                                 blá blá blá blá blá blá blá blá blá blá blá 
                                 blá blá blá blá blá blá blá blá blá blá blá */
                       }
             }
}



 Todo este nosso Blá blá blá não será interpretado pelo compilador e precisaremos apenas usar o recurso de abertura "/*" e fechamento "*/" para escrever nosso extenso comentário.

 Até mais!

3 - Namespace, Class e Função em C#

(Por: Rodrigo Ribeiro da Costa Barbosa - rodrigorcbarbosa@hotmail.com)

  Antes de dar continuidade aos nossos estudos de C#, vamos tentar entender alguns recursos que são utilizados na linguagem e já foram aplicados anteriormente. Para isso vamos analisar os códigos seguintes:

Código 1:

using System;

  namespace meuprograma
{
        class programa1
       {
            static void Main()
           {
              Console.WriteLine("Ensopado de TI !");
           }
       }
}

Código 2:


namespace meuprograma
{
   class programa1
       {
           static void Main()
           { 
              System.Console.WriteLine("Ensopado de TI !");
            }
       }
}



 Olhando este código rapidamente parece não haver nenhuma diferença entre ambos correto? ERRADO!
Se prestarmos um pouco mais de atenção, veremos uma simples diferença, o uso de um recurso na primeira linha do primeiro código "using System"  e a inserção de um "System" em "System.Console.WriteLine" no segundo código. Na verdade  ambos os programas funcionarão da mesma forma.
Então para que serve essa linha ? Só para escrever mais um pouco ? Se você disse sim para a segunda pergunta, errou de novo ! Pois ela serve justamente para o oposto... muita calma nessa hora que já vamos entender ! Antes deixe-me contar uma historinha. :-) .

 Já vimos que "Write.Line"  é uma função usada para mostrar algo na tela, várias funções assim como Write.Line estão disponíveis dentro da linguagem C#, cada uma delas executando uma terefa diferente !
 Algumas podem permitir que você imprima, outras que você trabalhe diretamente com banco de dados, temos ainda as que permitem gravar dados no disco ou ainda trabalhar com elementos gráficos, entre muitas outras.

  O ponto chave é simples!

  "Como lembrar de todas essas funções na hora de escrever um programa?"

 A resposta desenvolvida pela Microsoft foi mais simples ainda !

  "Vamos agrupar de modo lógico funções semelhantes dentro de uma mesma classe !!!"

 Então foi criado um sistema de hierarquia capaz de guardar cada função em uma classe pré-definida!
  Lembram oque eu disse no artigo anterior (Meu nome não é Johnny)?
  "O uso do "class" indica que estamos abrindo uma classe principal dentro do nosso programa que poderá incluir diversas funções diferentes assim como um contêiner de navio no qual se pode colocar diversas coisas dentro."

  Com base nisso podemos pensar o seguinte . Se eu tenho 3 empresas: Uma que exporta peixes, outra exporta adubo e outra exporta roupas íntimas, faria sentido eu colocá-las no mesmo contêiner na hora de enviá-las para  meus compradores em países diferentes? Imagine o cheiro que ficariam nas roupas íntimas ou o gosto do peixe !
 É tudo uma questão de organização. Então podemos dizer que nossa linguagem se assemelha a empresa onde:

   WriteLine seria um funcionário (função) que executa uma tarefa específica dentro do departamento Console(class) que fica dentro da empresa System (namespace) .

 Até aí tudo bem ... Mas porque existe um nome diferente para namespace no começo do código ?
BOAAAAAAA PERGUNTAAAAAAAA !

  É pelo seguinte, nos próximos artigos (dependendo de como o professor da faculdade irá desenvolver as aulas ), explicarei a criação de classes contendo uma estrutura de funções personalizadas. Sabendo que podemos criar estas classes com funções personalizadas então devemos questionar sobre o conflito de nomes.
Pois se eu criar uma classe chamada Console, como o compilador vai saber se estou chamando a classe desenvolvida por mim ou a classe desenvolvida pela microsoft ?
 Aí que entra o namespace ! Lembra da nossa empresa ? o namespace define se o compilador vai chamar o funcionário (função) do departamento (Console) da empresa (System) Microsoft ou (meuprograma) Ensopado de TI :-).
 E o using System que ficou lá para tráz?
 Disse que o uso dele nos faria digitar menos correto?

 Por padrão, namespaces como por exemplo (System) que foram criados pela microsoft ,  não precisam ser inseridos no início do código. Mas imagine se eu for escrever um código absurdamente grande com mais de 985698246347856892346  linhas (meio exagerado né?) usando grande parte das funções e classes no System . Seria mais cômodo eu  digitar System.Classe.Função ou Classe.função somente?
  Para isso que serve aquele "using" no começo do código. Ele elimina a necessidade de determinar o namespace das linhas de código pois já as insere como padrão.
  Mas e se eu quiser utilizar outro namespace no meio do programa ?
Simples : Você deverá definir o namespace normalmente de maneira manual.
Ex meuprograma.classe.função
   Pronto ! Agora já sabemos um pouco mais de C# !

Espero que o artigo tenha ajudado e até o próximo tutorial ! 

:-)

segunda-feira, 24 de agosto de 2009

2 - Meu Nome Não É Johnny ! C#

(Por: Rodrigo Ribeiro da Costa Barbosa - rodrigrcbarbosa@hotmail.com  )

Bem, agora que já sabemos qual é o conceito da linguagem C# podemos começar a pensar em desenvolver nosso primeiro programa, que por sinal é o dever de casa de hoje para a  aula de Lógica de Programação Estruturarda na faculdade em que estudo.
O primeiro passo é baixar o compilador do Visual C# Express para podermos escrever nosso programa em :
http://www.microsoft.com/express/download/
Durante a instalção podemos registrar o programa (gratuitamente) e receber uma chave de registro para validá-lo (Caso contrário o programa expira em 30 dias).

Após abrir nosso programa pela primeira vez, escolheremos qual tipo de projeto iremos trabalhar.
No nosso caso o caminho será  File > New Project > Console Application.
Note que na tela de edição aberta já estão inseridas algumas linhas de código que com certeza você não entendeu !:

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
        class Program
        {
               static void Main(string[] args)
              {
              }
        }
}


 Podemos apagar essas linha tranquilamente e prometo que nos tutoriais a seguir explico oque são cada uma delas com mais detalhes, pois agora iremos nos ater somente em escrever nosso primeiro programa.

IMPORTANTE !!! : O C# é case sensitive ou seja é sensível ao diferenciar letras maiúsculas de minúsculas então cuidado na hora de escrever seus programas pois "system.console.writeline()" (modo errado) não será interpretado como "System.Console.WriteLine()" (modo correto)


 Então mãos na massa ! Vamos digitar a seguinte estrutura que será explicada depois ...

using System;
namespace programa1
{
     class program
     {
           static void Main()
           {

                 System.Console.WriteLine("Meu nome é Rodrigo e esse é meu primeiro programa em C# !");
                 System.Console.ReadLine();
           }
     }
}


 Para testarmos nosso programa, podemos pressionar F5 ou um pequeno sinal de play verde na barra de ferramentas. (Pode mudar o nome de Rodrigo para qualquer outro, mas recomendo deixá-lo para dar sorte !!! rs...).
Se até aqui fizemos tudo certo, a saída do nosso programa na janela de prompt do DOS será :

 Meu nome é Rodrigo e esse é meu primeiro programa em C# !

Caso você não tenha conseguido essa saída recomendo que revise o código e os passos aqui descritos.
Caso tenha conseguido, meus parabéns !!! Já podemos colocar no currículo que somos programadores de nível fraldinha em C#  hehehehe.
 Agora vamos explicar essa bagunça!

O uso da função "using" e "namespace" será explicada com detalhes nos próximos tutoriais pois você até pode comer um elefante inteiro, mas tem que ser de pedaço em pedaço !
Por enquanto apenas nos conformemos com o uso inicial destes argumentos.
O uso do "class" indica que estamos abrindo uma classe principal dentro do nosso programa que poderá incluir diversas funções diferentes como um contêiner de navio no qual se pode colocar diversas coisas dentro. Para cada classe criada podemos definir um valor(nome) que seja relacionado com o conteúdo do codigo para facilitar as interpretações e a localização de possíveis erros no programa, não sendo viável o uso de espaços para a definição dos mesmos. Esse conceito será aprofundado posteriormente mas por ora podemos apenas ter em mente que todo código que escrevermos obrigatoriamente terá que estar inserido em uma classe. :-) .

 O uso de chaves "{}" é parte fundamental da estrutura da programação em C# e indica o início/fim dos métodos a serem utilizados dentro da classe. A maioria dos erros de compilação se dá pelo uso incorreto ( ou a falta ) das chaves, então cuidado com elas! Podemos notar que em nosso programa, possuimos três chaves de abertura "{ "e três chaves de fechamento "}"  se notarmos, a primeira chave abre a linha "class program" que já foi explicado no parágrafo acima. A segunda chave abre a linha aonde o ponto de partida do programa está definido ou seja o nosso método de entrada principal "static void Main()"  sem essa entrada, nosso programa não irá saber aonde começar a processar as instruções !
 A terceira chave, abre para as seguintes instruções:  "System.Console.WriteLine("Meu nome é Rodrigo e esse é meu primeiro programa em C# !");" e  "System.Console.ReadLine();" Que respectivamente mostra um valor definido pelo programador na tela (WriteLine) e pausa o console no final da execução para que este não se feche automaticamente (ReadLine).
 Ao fim de tudo isso temos as três chaves de fechamento encerrando assim nosso primeiro programa em C# !

Espero que tenham gostado e até o próximo tutorial !!!

1 - Introdução ao C#

Primeiro post !
(Por Rodrigo Ribeiro da Costa Barbosa - rodrigorcbarbosa@hotmail.com)

Segue abaixo um artigo que explica bem oque é a linguagem de programação C#.
Antes de começar a programar, é interessante saber o porque de utilizarmos uma linguagem e não outra pois quando nosso cliente questionar, teremos que ter conhecimento suficiente para argumentar de forma satisfatória o porque do uso da linguagem "x" e não "y".
Mesmo com esse artigo ainda fica uma questão... C# é multiplataforma? Pois o Framework dot Net não é livre e roda somente em Windows.
Em algumas pesquisas pelo google encontrei tutoriais que ensinam como programar usando C#  em ambiente Linux utilizando implementações livres que substituem o Framework (ver: http://www.go-mono.com/ ) Mas até onde isso pode ser funcional para quem desenvolve softwares multiplataformas eu não faço idéia. Acredito que nesse ponto o JAVA seja superior por necessitar somente de uma máquina virtual que é disponível para todos os grandes sistemas operacionais, mas enfim ....


Introdução ao C#

O C# (C Sharp) é uma linguagem de programação desenvolvida pela Microsoft que é completamente suportada pela plataforma .NET Framework, abrange o poder e a versatilidade do Visual Basic, a força e a criatividade do C++ e a inteligência do Javascript para validações. Além disso, por ser derivado de C++ e C e por possuir uma grande semelhança com a linguagem de programação Java, permitindo que desenvolvedores destas linguagens pudessem se adaptar com facilidade ao C#.
Segundo HADDAD (2004) o impacto do C# no mercado será tão grande que muitas ferramentas e plataformas deixaram de existir e que, de acordo com a Microsoft, a linguagem oficial agora é o C#.


Vantagens e desvantagens do C#

O C# possuiu grandes vantagens, uma delas é a possibilidade de maior interatividade com os internautas, que passam a poder postar informações a qualquer momento, com o C# controlando o envio e recebimento de dados, principalmente a partir da mesma página. Uma outra vantagem na utilização de C# é programação orientada a objeto, não possíveis em C e em Visual Basic. Segundo HADDAD (2004) este seria um dos melhores recursos oferecido por esta linguagem, visto que os códigos podem ser utilizados facilmente, pois existem heranças poliformismo e encapsulamento. Um outro tão esperado recurso oferecido pelo C# é o recurso de programação orientado a evento, que significaria não ter de programar linhas em Javascript para disparar os poucos eventos existentes em alguns controles. Novos eventos de página e controles foram criados visando facilitar a programação.

Uma outra vantagem é o recurso do ambiente Windows. No C# o desenvolvimento é muito semelhante com aplicações deskop, utilizando recursos do ambiente Windows. Assim, alguns dos controles que somente eram encontrados em componentes são agora nativos. Outros aspectos vantajosos no C#, é que toda Data Definition Language (DLL) ou componente não precisa mais ser registrado, extingue-se o papel do registry e com os novos controles validator, torna-se mais fácil consistir e validar dados na web, bastando apenas invocar o componente, estabelecer a propriedade e vincular a algum controle. Além disso, tratar erros também se tornou muito fácil , por meio do Execption, o próprio C# identifica e trata o erro.

Em síntese, a linguagem de programação C# disponibiliza os seguintes aspectos:

* Maior interatividade com os internautas;
* Possui recurso de programação orientada a objeto;
* Uso de evento nos controles;
* Desenvolvimento em ambiente Windows;
* Não precisa registrar componentes;
* Possui fácil validação de dados; e
* Fácil tratamento de erros.

No entanto, uma das desvantagens da utilização da linguagem de programação C# é a necessidade, em alguns casos, dos programas e componentes antigos devem ser reescritos. Muitos dos componentes antigos que funcionam perfeitamente podem ser utilizados no C#, contudo não é recomendável. A melhor opção, segundo HADDAD (2004), é reescrever o código com os recursos do C#, tornando-o mais compatível com a nova plataforma.
 
Fonte:

http://forum.imasters.uol.com.br/index.php?/topic/280981-introducao-ao-c%23/