(Parte 1 de 6)

Como Programar com ASP.NET e C#

Alfredo Lotar

Novatec capítulo 1 Introdução ao C# e .NET Framework

.NET Framework é um componente integrado ao Windows que suporta a execução e o desenvolvimento de uma nova geração de aplicações e XML web services. Segundo a documentação, o .NET Framework foi projetado com os seguintes objetivos:

• Prover um ambiente consistente de programação orientado a objetos de modo que o código do objeto é armazenado e executado localmente, mas pode ser também armazenado na internet e executado remotamente.

• Prover um ambiente de execução de código que minimiza o desenvolvimento de software e conflitos de versão.

• Prover um ambiente de execução de código que promove execução segura de código, inclusive código criado por fontes desconhecidas.

• Prover um ambiente de execução de código que elimine os problemas de desempenho gerados por linguagens de script ou ambientes interpretados.

• Aproveitar o conhecimento do programador em diferentes tipos de aplicações, como aplicações Windows ou web.

• Construir toda a comunicação em padrões reconhecidos pela indústria para que o .NET Framework possa se integrar com qualquer tipo de código.

O .NET Framework tem dois componentes principais: o Common Language Runtime – CLR e o .NET Framework class library, que inclui o ADO.NET, ASP.NET e o Windows Forms.

1.1 Common Language Runtime – CLR

É o mecanismo responsável pela execução das aplicações .NET Framework. O C# suporta CLR, assim como outras linguagens de programação da Microsoft. O código gerado pelo compilador para o suporte CLR chamamos de código gerenciado. O Common Language Runtime – CLR (linguagem comum em tempo de execução) é o

25Capítulo 1 • Introdução ao C# e .NET Framework cérebro do .NET Framework. Pense nele como o agente que gerencia o código em tempo de execução, provendo serviços como, por exemplo, o gerenciamento de memória. Veja os benefícios que o CLR nos proporciona:

• Gerenciamento automático de memória.

• Verificação de segurança de tipos.

• Gerenciamento de exceções.

• Segurança aprimorada.

• Acesso a metadados.

1.2 Class library – biblioteca de classes

É uma biblioteca de classes, interfaces e tipos incluídos no .NET Framework que permite acesso às funcionalidades do sistema e é a base a partir da qual são construídas aplicações .NET, componentes e controles. Com essa biblioteca de classes, podemos criar aplicações que executam as mais variadas tarefas como, por exemplo, um software de gestão empresarial, um editor de imagens semelhante ao Photoshop, ou ainda, um web site de comércio eletrônico. As principais funcionalidades oferecidas pela biblioteca de classes são:

• Representa tipos de dados básicos e exceções.

• Permite o encapsulamento da estruturas de dados.

• Executa operações de entrada e saída.

• Acessa informações sobre tipo de dados carregados.

• Realiza verificações de segurança.

• Provê acesso a dados e à internet.

• Permite desenvolver a interface de uma aplicação.

• Permite o desenvolvimento de aplicações Windows e ASP.NET.

1.3 Linguagens suportadas

As linguagens da Microsoft suportadas pelo CLR são: Visual Basic, C#, Visual C++, Jscript, Visual J#, além de linguagens desenvolvidas por outras empresas como, por exemplo, Perl e COBOL.

Uma característica interessante do CLR é a interação entre as linguagens. Por exemplo, podemos desenvolver um componente no Visual Basic e utilizá-lo com C#. Esta é uma característica muito interessante quando trabalhamos com equipes que dominam várias linguagens de programação. Cada programador pode trabalhar usando a sua

26Como Programar com ASP.NET e C# linguagem preferida e, no final, o projeto é integrado como se tivesse sido criado em uma única linguagem.

A integração entre as linguagens facilita a vida de empresas e programadores que adquirem ou vendem componentes. A linguagem em que o componente foi desenvolvido é irrelevante. A única preocupação que teremos é que tenha sido desenvolvido numa linguagem que suporte CLR. Pelo que tenho observado em web sites de empresas desenvolvedoras de componentes, C# é a linguagem preferida para desenvolvimento de componentes. Em alguns web sites podemos encontrar a seguinte frase: “Desenvolvido 100% em código gerenciado C#”.

1.4 Linguagem intermediária – MSIL

Quando compilamos o código gerenciado, geramos Microsoft Intermediate Language – MSIL, ou simplesmente IL, o qual é independente de CPU e pode ser convertido para código nativo. MSIL inclui instruções para carregar, armazenar, inicializar e executar métodos, assim como instruções para operações aritméticas e lógicas, controle de fluxo etc.

O código contido no MSIL não pode ser executado diretamente; antes de executá-lo, é preciso convertê-lo para instruções que possam ser interpretadas pela CPU. A conversão é realizada por um compilador just-in-time (JIT ou JITter).

MSIL é independente de plataforma, assim só precisamos de um compilador para converter código MSIL em código nativo na máquina-alvo. Além disso, os metadados, que representam informações utilizadas pelo CLR, são colocados em um arquivo chamado Portable Executable – PE, que pode ter a extensão DLL ou EXE.

1.5 Compilando MSIL para código nativo

Antes de executar o MSIL, é preciso utilizar o .NET Framework just-in-time (JIT) para convertê-lo para código nativo. Assim, geramos código específico para a arquitetura na qual roda o compilador JIT. Seguindo este raciocínio, podemos desenvolver uma aplicação e convertê-la para várias plataformas. Para isso, precisamos apenas converter o MSIL para código nativo com um compilador JIT, específico para a plataforma desejada.

Cada sistema operacional pode ter seu compilador JIT. Claro que chamadas específicas a API do Windows não funcionarão em aplicações que estejam rodando em outro sistema operacional. Isso significa que devemos conhecer e testar muito bem uma aplicação, antes de disponibilizá-la para múltiplas plataformas.

Em uma aplicação comercial grande, geralmente usamos um número limitado de funções. Assim sendo, algumas partes do código dessa aplicação podem não ser executadas.

27Capítulo 1 • Introdução ao C# e .NET Framework

Como a conversão do MSIL para código nativo acarreta consumo de tempo e memória, ela é realizada somente na primeira vez em que o código é executado. Por exemplo, se o nosso programa compila um determinado método, haverá compilação somente na primeira vez em que o método for executado. As chamadas seguintes utilizarão código nativo. O MSIL convertido é usado durante a execução e armazenado para que esteja acessível para chamadas subseqüentes.

Imagine, por exemplo, que você tenha uma classe com cinco métodos; quando você chamar o primeiro método, somente este será compilado, e, quando precisar de outro método, este também será compilado. Chegará um momento em que todo o MSIL estará em código nativo.

1.6 Assemblies

Assemblies são a parte fundamental da programação com .NET Framework. Um assembly contém o código que o CLR executa. O código MSIL dentro de um arquivo portable executable – PE não será executado se não tiver um assembly manifest associado, e cada assembly deve ter somente um ponto de entrada, exemplo: DllMain, WinMain ou Main.

Um assembly pode ser estático ou dinâmico. Assemblies estáticos podem incluir vários tipos (interfaces e classes) do .NET Framework, como também recursos para assemblies (bitmaps, arquivos jpeg etc.). Assemblies estáticos são armazenados no disco rígido com um arquivo portable executable. O .NET Framework cria assemblies dinâmicos que são executados diretamente da memória e não precisam ser armazenados em disco. Podemos salvar em disco assemblies dinâmicos após sua execução.

Um assembly pode ser criado usando o Visual Studio ou outras ferramentas disponibilizadas pelo .NET Framework SDK. Assemblies dinâmicos podem ser criados com as classes da namespace System.Reflection.Emit.

1.6.1 Assemblies – benefícios

Assemblies foram projetados para simplificar o desenvolvimento de aplicações e resolver problemas ocorridos pelo conflito de versões causado pela instalação de uma mesma DLL de versão diferente da usada pela aplicação atual. O conflito entre as DLLs é um problema antigo do Windows e não ocorre com o .NET Framework, pois cada aplicação tem suas próprias DLLs. Quando instalamos uma aplicação .NET, os arquivos PE (DLL e EXE) ficam no mesmo diretório da aplicação, assim podemos ter diferentes versões da mesma DLL no computador.

28Como Programar com ASP.NET e C#

1.6.2 Assembly – conteúdo Um assembly estático consiste de quatro partes: • Assembly manifest que contém o metadata do assembly.

• Tipo metadata.

• Código MSIL que implementa os tipos.

• Os recursos para assemblies (bitmaps, arquivos jpeg etc.) e outros arquivos necessários para a aplicação.

1.7 Metadata

O metadata descreve tipos e membros contidos numa aplicação. Quando convertemos o código C# num Portable Executable – PE, o metadata é inserido em uma porção deste arquivo, enquanto o código é convertido para MSIL e inserido em outra porção deste mesmo arquivo. Quando o código é executado, o metadata é carregado na memória, juntamente com as referências para as classes, os membros, a herança etc.

O metadata armazena as seguintes informações: • Descrição do assembly.

• Identificação (nome, versão, cultura, chave pública).

• Os tipos que são exportados.

• Outros assemblies das quais este assembly depende.

• Permissões de segurança necessárias para a execução.

• Descrição de tipos.

• Nome, visibilidade, classe base e interfaces implementadas.

• Membros (métodos, campos, propriedades, eventos etc.).

• Atributos.

• Elementos descritivos adicionais que modificam tipos e membros.

1.8 Manifest

Todo assembly, estático ou dinâmico, contém uma coleção de dados que descrevem como os elementos em um assembly se relacionam um com os outros. O assembly manifest contém todo o metadata necessário para o assembly definir versão, identificar aspectos relativos à segurança e referências para recursos e classes. O manifest pode ser armazenado junto com MSIL no PE (.dll ou .exe) ou num PE separado. Observe os tipos de assemblies na Figura 1.1:

29Capítulo 1 • Introdução ao C# e .NET Framework

Figura 1.1 – Tipos de assemblies.

1.9 Garbage collector – coletor de lixo

É um mecanismo que descarta, de forma automática, os objetos que não são mais utilizados por uma aplicação. Isso deixa o programador mais tranqüilo, pois não há preocupação com o gerenciamento de memória da aplicação. O CLR detecta quando o programa não está mais usando um objeto e o recicla automaticamente.

1.10 C# – a linguagem de programação

C# (lembrando que se lê C Sharp) é uma linguagem de programação simples, mas poderosa, e ao mesmo, tempo ideal para desenvolver aplicações web com ASP.NET. É uma evolução do C e C++. Além de utilizar muitas características do C++, como, por exemplo, declarações, expressões e operadores, o C# possui um mecanismo chamado Garbage collector (Coletor de Lixo) que gerencia de, forma automática, a memória utilizada pelas aplicações e facilita o desenvolvimento de aplicações web e de aplicações para desktop.

O C# é uma linguagem orientada a objetos com a qual podemos criar classes que podem ser utilizadas por outras linguagens como, por exemplo, o Visual Basic. Uma característica importante é que ainda é possível utilizar os componentes COM, facilitando assim uma rápida migração para um ambiente de desenvolvimento de alto nível sem precisar reescrever todas as aplicações que você possui.

A sintaxe utilizada pelo C# é relativamente fácil, o que diminui o tempo de aprendizado. Depois que você entender como ela funciona, não terá mais motivos para utilizar outra linguagem complicada, pois ela possui o poder do C++ e é simples como o Visual Basic.

Por ser uma linguagem orientada a objeto, existe a capacidade de uma classe herdar certas características ou métodos de outras classes, sejam elas escritas em C# ou em VB.

Todos os programas desenvolvidos devem ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a execução dos programas mais rápida se compara-

30Como Programar com ASP.NET e C# dos com as linguagens de script (VBScript, JavaScript) que atualmente utilizamos na internet.

Nosso primeiro programa C# é extremamente simples. O programa deve exibir na tela “Olá mundo”.

// Nosso primeiro programa C# /* programa Olá mundo para compilar utilize csc OlaMundo.cs */ namespace OlaMundo { class Ola { static void Main() {

System.Console.WriteLine(“Olá Mundo!”); }

Observe o que significa cada linha do programa anterior.

1.10.1 Comentários

Usamos comentários para descrever partes complexas de código, a fim de facilitar a manutenção de quem elaborou o software e de terceiros. Comentários não são interpretados pelo compilador C#. Podemos definir como um comentário: textos, caracteres especiais, trechos de código, números etc.

O C# nos permite definir comentários de duas maneiras: usando barras duplas (//) ou os caracteres /* e */.

Barras duplas (//) convertem o restante da linha em comentários: // Nosso primeiro programa C#

Os caracteres /* e */ definem blocos de texto como comentários. Exemplo:

/*Este é meu primeiro contato com C#. Espero que aprenda rápido está nova linguagem de programação. Obrigado! */

1.10.2 Método Main

Um programa C# deve conter um método Main, que controla o início e o fim. Nele você cria objetos e executa outros métodos. Um método Main pode não retornar valores.

//

static void Main() { } ou retornar um valor inteiro (int):

31Capítulo 1 • Introdução ao C# e .NET Framework

//

static int Main() { return 0; }

Com ambos os tipos (void ou int), o método Main pode conter parâmetros

//

static void Main(string[] args) { }

//

static int Main(string[] args) { return 0; }

1.10.3 Sintaxe C#

Todas as instruções devem estar entre chaves e sempre ser finalizadas com um pontoe-vírgula, como você verá a seguir:

// Código aqui; }

Além disso, C# é sensível a letras maiúsculas e minúsculas, ou seja, Main não é o mesmo que main. Não observar este detalhe impossibilita a execução do programa.

1.10.4 Entrada e saída

A entrada e saída de um programa C# é realizado pela biblioteca de classes do .NET Framework. A instrução System.Console.WriteLine(“Olá Mundo!”); utiliza o método WriteLine da classe Console. Não se preocupe se alguns termos são desconhecidos para você, exemplo: classe, método, namespace, diretiva etc. Neste mesmo capítulo, todos esses termos serão explicados e exemplificados.

1.10.5 Compilação e execução do programa

Podemos digitar o código do programa C# no bloco de notas ou utilizar um editor mais completo como, por exemplo, o Microsoft Visual C# Express Edition ou o Visual Studio 2005 ou superior. Para facilitar o aprendizado, utilizaremos o bloco de notas, assim seremos obrigados a realizar todo o trabalho “pesado” para tornar o programa funcional. Para executar um programa desenvolvido em C#, é necessário instalar o .NET Framework. No entanto, antes de instalar no seu computador o .NET Framework 2.0 ou superior, leia o Capítulo 29 deste livro.

Para executar o nosso primeiro programa siga os passos descritos a seguir:

32Como Programar com ASP.NET e C#

(Parte 1 de 6)

Comentários