NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosNet : Dotnetframework001
Quer receber novidades e e-books gratuitos?

Introdução ao .NET Framework

Objetivos:

Este parte do tutorial discute o .NET Framework e o Common Language Runtime. Também fornece introdução a sintaxe de classes, estruturas e declarações de métodos.

Pré-requisitos:

Nenhum.

O .NET Framework e o Common Language Runtime

Visão geral sobre o .NET Framework

O .NET Framework é uma ambiente seguro e gerenciado para desenvolvimento e execução de aplicações.  O .NET Framework gerencia todos os aspectos da execução de um programa. Ele aloca memória para armazenar as instruções e dados, fornece as permissões adequadas para a execução de sua aplicação, inicia e gerencia a execução da aplicação e gerencia a alocação  da memória liberando memória que não está sendo mais usada. O .NET Framework consiste em dois componentes principais: O Common Language Runtime  e a .NET Framework Class Library.

Linguagens e o .NET Framework

O .NET Framework foi criado para ser multiplataforma, isto significa que um componente .NET pode interagir com outro componente .NET sem nenhum problema desde que ambos tenham sido desenvolvidos em linguagens .NET. Podemos ter uma página Web desenvolvida em ASP.NET utilizando Visual Basic .NET que utiliza Web Services desenvolvidos em C# que por sua vez utilizam componentes desenvolvidos em C++. Esta interoperabilidade entre linguagens se extende a herança da Orientação à Objetos. Um componente em C# pode ser derivado de um componente desenvolvido em VB.NET.

Esta nível de compatibilidade  entre as linguagens .NET é possível graças ao Common Language Runtime. Quando uma aplicação desenvolvida  em .NET utilizando C#, VB.NET ou C++ é compilada ela é convertida da sua linguagem original para a Microsoft Intermediate Language, MSIL ou simplesmente IL. MSIL é uma linguagem de baixo nível que o Common Language Runtime pode ler e entender. Devido a todo executável .NET existir em MSIL eles podem interoperar sem problemas. A Common Language Specification, CLS, define um mínimo de padrões que devem ser seguidos por compiladores de linguagens .NET. A CLS garante que todo código compilado com sucesso por um compilador compatível por .NET pode interoperar no .NET Framework.

A CTS garante compatibilidade entre os componentes .NET. Como as aplicações .NET são convertidas em IL para serem executadas e publicadas todos tipos primitivos das linguagens são os mesmos tipos do .NET. Sendo assim o inteiro do VB.NET e o int do C# são representados no código IL por System.Int32. Como as linguagens compatíveis com o .NET obedecem ao CTS é possível transferir dados entre elas sem perda de tempo para conversão de dados e sem erros.

O Visual Studio .NET fornece um ambiente de desenvolvimento para linguagens como VB.NET, C#, C++ e Jscript. Você também pode escrever código para .NET Framework em outras linguagens. Ferramentas de terceiros permitem que você utilize linguagens como COBOL, Fortran, Perl e outras linguagens. Todas estas linguagens fornecem interoperabilidade das demais linguagens .NET. Então você pode escrever código para .NET na linguagem de sua escolha.

A estrutura de uma aplicação .NET

Para entender como o Common Language Runtime gerencia a execução do código será preciso que examinemos a estrutura de uma aplicação .NET. A unidade primária de uma aplicação .NET é o Assembly. O Assembly é uma coleção de códigos auto-descritivo, recursos e metadados. O manifesto do Assembly contém informações sobre o que existe no Assembly. O manifesto do assembly fornece:

» Informações de identificação como o nome do assembly e seu número de versão

» A lista de todos os tipos utilizados pelo assembly

» A lista de outros assemblies necessários para o funcionamento do assembly

» A lista de instruções de segurança incluindo o nível de permissão e acesso necessário para que o assembly seja executado

Cada assembly tem um e somente um manifesto do assembly e ele contém todas as descrições e informações do assembly. Porém o manifesto de assembly pode estar contido no seu próprio arquivo ou ou dentro de um dos módulos do assembly.

Um assembly contém um ou mais módulos. Um módulo contém um código que faz parte de sua aplicação ou de sua biblioteca e os metadados que descrevem esta aplicação. Quando você compila um projeto e o transforma em um assembly seu código de alto nível é convertido para o IL (Intermediate Language). A conversão de todo código gerenciado em IL antes de ser executado perrmite que diferentes linguagens interajam entre si. Podemos citar como exemplo um código desenvolvido em C++ acessando um componente em VB.NET. Todo projeto é primeiro convertido em IL antes de ser executado permitindo a compatibilidade entre as linguagens.

Cada módulo contém um determinado número de tipos. Tipos são modelos que descrevem um conjunto de dados encapsulados e suas funcionalidades. Há duas categorias de tipos:  tipos por referência (classes) e tipos por valor (estruturas). Cada tipo é descrito para o Common Language Runtime através do manifesto do assembly.

Um tipo pode conter campos, propriedades e métodos cada um dele pode estar relacionado a uma funcionalidade comum. Por exemplo você pode ter uma classe que representa a conta de um banco. Ela contém campos, propriedades relacionados a funções que necessitam ser implementas para uma conta de um banco. Um campo representa o armazenamento de um determinado tipo de dados. Um campo pode armazenar o nome do proprietário da conta, por exemplo. Propriedades são semelhantes aos campos, porém propriedades normalmente fornecem algum tipo de validação quando o dado é armazenado ou recuperado. Você pode ter uma propriedade que representa o saldo da conta. Quando ocorre uma tentaiva de diminuir o saldo abaixo de zero a propriedade impede esta alteração. Métodos representam comportamentos como ações que podem armazenar dados na classe ou alterar a interface com o usuário. Seguindo o exemplo do banco podemos ter o método Transferência que executa a tranferência de valores de uma conta para a outra.

Compilação e execução de uma aplicação .NET

Quando você compila uma aplicação .NET ela não é compilada para o código de máquina. Ela é compilada para a Microsoft Intermediate Language. Esta é a forma como sua aplicação possui um ou mais arquivos executáveis e DLLs em IL. Ao menos um desses executáveis é sempre o ponto de entrada da aplicação.

Quando a sua aplicação é executada o assembly que é a porta de entrada é imediatamente carregada para a memória. Neste momento o Common Language Runtime examina o manifesto do assembly e determina todas as características necessárias para execução da aplicação. Ele também verifica quais as necessidades de segurança que o programa necessita e se o sistema operacional permite atender estas necessidades. Caso o sistema operacional não permita o nível de segurança desejado pelo programa o programa é abortado.  Se o sistema operacional atende os requisitos de segurança da aplicação ela é executada. O Common Language Runtime  cria um processo e executa a aplicação nele. Quando a execução é iniciada o primeiro “bit” de código é carregado para a memória e compilado para o código binário da máquina pelo compilador Just-In-Time. Depois de compilado o código é executado e armazenado na memória já como código nativo. Cada porção de código é compilada uma única vez quando o código é executado.

A .NET Base Class Library

A .NET Base Class Library contém as classes básicas que fornecem serviços e objetos que você precisa quando for escrever seus programas. As bibliotecas de classes são organizadas em namespaces. O namespace é um conjunto de tipos que executam funções relacionadas. Por exemplo: O namespace System.Windows.Forms contém todos os tipos que são necessários para criar formulários e controles utilizados nos formulários.

Namespace são grupos lógicos de classes relacionadas. Os namespaces da .NET base class library são organizados hierarquicamente. O namespace raiz  do .NET Framework é o namespace System. Outros namespaces podem ser acessados com a utilização do operador ponto. Algumas formas típicas de usar um namespace são mostradas abaixo:

System

System.Data

System.Data.SQLClient

O primeiro exemplo se refere ao namespace System. O segundo refere-se ao namespace System.Data. O terceiro exemplo faz referência ao namespace System.Data.SQLClient. A tabela abaixo exibe alguns dos namespaces mais comuns usados no .NET.

O nome do namespace constuma ser auto descritivo e facilita a familiaridade com o objetivo de cada namespace.

Tipo por referência e tipo por valor

Tipos em .NET podem ser dividos em duas categorias: tipos por valores e tipos por referência. A diferença entre os tipos por valor e os tipos por referência é como os dados das variáveis são acessadas. Para entender a diferença um pequeno resumo de como a memória funciona faz-se necessário.

A memória de dados da aplicação é dividida em dois componentes primários stack e heap. A stack é a área da memória reservada para a aplicação rodar o programa. A stack é análoga a uma pilha de pratos. Pratos são colocados na pilha um sobre o outro. Sempre que um prato precisa ser retirado da pilha  é sempre o último que foi colocado nela que é retirado. Assim também acontece com as variáveis de programas.

Quando uma função é chamada todas as suas variáveis são carregadas para a memória stack. Se a função chamada chama funções adicionais as variáveis destas funções adicionais também são armazenadas na memória stack. Quando a última função a ser chamada for encerrada todas as suas variáveis são retiradas da memória. A memória consumida por estas variáveis e liberada e o programa continua sua execução.

A área da memória heap é reservada para criar objetos reutilizáveis. O Common Language Runtime gerencia a alocação desta área de memória para objetos e controles e libera a memória de objetos e controles não utilizados através do garbage collection.

Nota

A garbage collection será discutida em mais detahes em tópicos mais adiante.

Todo dado associado a um tipo por valor é alocado na memória stack. Quando a função que é dona da variável termina sua execução a área de memória é liberada. Variáveis de tipo por referência existem nas duas áreas de memórias. O data do objeto atual é alocado na memória heap. A variável que contém o ponteiro que indica em que local da memória head o objeto se encontra fica na área de memória stack. Quando esta variável é chamada por uma função ela retorna o endereço de memória do referido objeto a que ela representa. Quando a função que a criou encerra suas ações a área de memória que guarda a referência ao objeto é liberada mas á área de memória aonde o objeto é armazenado não. Se outras variáveis fazem referência a este objeto ele permanece intacto. Se o objeto não tem mais referência a ele, ele será eliminado na próxima vez que for executado pelo Common Language Runtime o Garbage Collection.

Exemplos tipos por valores são os tipos primitivos Integer (Int), Char (char), Boolean (bol) e outros tipos definidos pelo usuário como Structure (struct) e Enumeration (enum). Classes representam a grande maioria dos tipos por referência. Outros tipos por referência são interfaces, delegate e tipos array.

Nota

Neste tutorial quando mencionarmos termos do VB.NET e do C# juntos o termo do C# será mostrado após os termos do VB.NET e serão colocados entre parentêses).

1 Visão geral do .NET Framework e do CLR
1 Comunicação .NET e VB 6.0 (com Visual Studio.NET 2005) - Parte I
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 1
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 2
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 3
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 4
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 5
1 VB: Menu Principal, Menu PopUp e Arquivos Texto
Visual Studio
1 ASP.NET 2.0 - Conhecendo o ObjectDataSource Control
1 Visual Web Developer - 2005 - Beta 2 - Introdução
1 ASP.NET 2.0 - Conhecendo o GridView
1 ASP.NET 2.0 - Utilizando o GridView e DetailsView
1 ASP.NET 2.0 - Conhecendo o ObjectDataSource Control - Parte 2
1 ASP.NET 2.0 - Utilizando o XmlDataSource
1 Envio de e-mail através de formulário web
1 ADO.NET 2.0 - Conhecendo as novidades parte 1
1 Série Visual Source Safe - Parte 1
1 Série Visual Source Safe - Parte 3
1 URL Indexável – Reescrever URL de uma forma amigável
1 Permissão de Página Utilizando Web.Config
1 Usando public interface
1 Trabalhando com o componente TabContainer
1 Adicionando Menu no DataGridView
ASP.NET
1 Conhecendo o ambiente integrado do WebMatrix
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte I
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte II
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte III
1 Acessando um banco de dados facilmente com ADO.Net e Datagrid
1 Desvendando os segredos do Dataset- Parte I
1 Construindo um Sistema de Publicação de Notícias – Parte 1
1 Construindo um Sistema de Publicação de Notícias – Parte 2
1 Construindo um Sistema de Publicação de Notícias – Parte 3
1 Construindo um Sistema de Publicação de Notícias – Parte 4
1 Construindo um Sistema de Publicação de Notícias – Parte 5
1 Login com Perfil de Acesso
1 Guest Book com XML - Parte 1
1 Guest Book com XML - Parte 2
1 Agendando Datas no Calendário com XML
1 Filtrando e Organizando Dados com o Controle DataView
1 Lista de Dados com Subitens – Parte 1
1 Lista de Dados com Subitens – Parte 2
1 Trabalhando com Arquivos e Diretórios – Parte 1
1 Trabalhando com Arquivos e Diretórios – Parte 2
1 Trabalhando com Arquivos e Diretórios – Parte 3
1 Sistema de Enquetes baseado em WebServices – Parte 1
1 Sistema de Enquetes baseado em WebServices – Parte 2
1 Sistema de Enquetes baseado em WebServices – Parte 3
1 Upload de Arquivos
1 Crie seu próprio código de verificação
1 Login e Senha com FormsAuthentication – Parte 1
1 Login e Senha com FormsAuthentication – Parte 2
1 Sistema de Enquetes baseado em WebServices – Parte 4
1 Sistema de Enquetes baseado em WebServices – Parte 5
1 Sistema de Enquetes baseado em WebServices – Parte 6