Tipos de aplicativos .NET. Compreendendo os conceitos básicos do .NET Framework Qual é o propósito da Common Language Specification (CLS)

14.09.2022

O .NET Framework é um componente integrado do Windows que oferece suporte à criação e execução de uma nova geração de aplicativos e serviços Web XML. O .NET Framework foi projetado com os seguintes objetivos em mente:

· Fornecer um ambiente de programação orientado a objetos consistente para armazenar e executar código-objeto localmente, para execução local de código distribuído na Internet ou para execução remota.

· Fornecer um ambiente de execução de código que minimize conflitos na implantação de software e controle de versão.

· Fornecer um ambiente de execução de código que garanta a execução segura de código, incluindo código gerado por terceiros desconhecidos ou menos confiáveis.

· Fornecer um ambiente de execução de código que evite problemas de desempenho com scripts ou ambientes de execução de código interpretado.

· Garanta uma experiência de desenvolvedor consistente em diferentes tipos de aplicativos, como aplicativos Windows e aplicativos Web.

· Desenvolver interoperabilidade baseada em padrões do setor que garantirá que o código do .NET Framework se integre a qualquer outro código.

Os dois componentes principais do .NET Framework são o Common Language Runtime (CLR) e a biblioteca de classes do .NET Framework. O núcleo do .NET Framework é o CLR. O tempo de execução pode ser pensado como um agente que gerencia o código em tempo de execução e fornece serviços básicos, como gerenciamento de memória, gerenciamento de threads e comunicação remota. Ao mesmo tempo, são impostas condições rigorosas de digitação e outros tipos de verificação da precisão do código para garantir segurança e confiabilidade. Na verdade, a principal tarefa do tempo de execução é gerenciar o código. O código que acessa o tempo de execução é chamado de código gerenciado, e o código que não acessa o tempo de execução é chamado de código não gerenciado. Outro componente central do .NET Framework, a biblioteca de classes fornece uma coleção completa de tipos orientados a objetos que são usados ​​para desenvolver aplicativos, desde os convencionais executados a partir da linha de comando ou com uma interface gráfica do usuário, até aplicativos que aproveitam os mais recentes recursos da tecnologia ASP.NET, como Web Forms e XML Web Services.

O .NET Framework pode hospedar componentes não gerenciados que carregam o Common Language Runtime (CLR) em seus próprios processos e executam código gerenciado, criando um ambiente de programação que permite a execução gerenciada e não gerenciada. O .NET Framework não apenas fornece vários tempos de execução principais, mas também oferece suporte ao desenvolvimento de tempos de execução principais de terceiros.


Por exemplo, o ASP.NET hospeda o tempo de execução para fornecer um ambiente escalável do lado do servidor para código gerenciado. O ASP.NET funciona diretamente com o tempo de execução para habilitar aplicativos ASP.NET e serviços Web XML, ambos discutidos posteriormente neste tópico.

O Internet Explorer é um exemplo de aplicativo não gerenciado que hospeda o tempo de execução (na forma de uma extensão do tipo MIME). Usar o Internet Explorer para hospedar o tempo de execução permite incorporar componentes gerenciados ou controles do Windows Forms em documentos HTML. Hospedar o tempo de execução dessa forma torna possível o código móvel gerenciado (semelhante aos controles Microsoft® ActiveX®), mas com melhorias significativas que somente o código gerenciado pode oferecer, como execução semiconfiável e armazenamento isolado de arquivos.

A ilustração a seguir mostra o relacionamento do Common Language Runtime e da biblioteca de classes com seus aplicativos e com o sistema geral. A ilustração também mostra como o código gerenciado funciona em uma arquitetura maior.

NET Framework no contexto

As seções a seguir descrevem os principais componentes e recursos do .NET Framework com mais detalhes.


Por exemplo, o ASP.NET hospeda o tempo de execução e fornece um ambiente escalonável para código gerenciado no servidor. O ASP.NET funciona diretamente com o tempo de execução para permitir a execução dos aplicativos ASP.NET e dos serviços Web XML discutidos posteriormente neste tópico.

O Internet Explorer é um exemplo de aplicativo não gerenciado que hospeda o tempo de execução (na forma de extensões do tipo MIME). Hospedar o tempo de execução no Internet Explorer permite incorporar componentes gerenciados ou controles do Windows Forms em documentos HTML. Esse layout de ambiente possibilita a execução de código móvel gerenciado (semelhante aos controles Microsoft® ActiveX®), mas com os benefícios significativos do código gerenciado, como execução de confiança parcial e armazenamento isolado de arquivos.

A figura a seguir demonstra como o Common Language Runtime e a biblioteca de classes interagem com os aplicativos do usuário e com todo o sistema. A figura também mostra como o código gerenciado funciona na arquitetura mais ampla.

NET Framework no contexto

As seções a seguir fornecem uma descrição mais detalhada dos principais componentes e recursos do .NET Framework.

É uma das linguagens de programação mais populares, multifuncionais e em desenvolvimento ativo no momento. Com sua ajuda você pode desenvolver praticamente qualquer software, começando com simples formulários de vitória aplicações, para grandes aplicações web cliente-servidor ou até mesmo aplicações móveis e jogos de computador. E funciona com base na plataforma .NET Framework. Vamos descobrir o que é.

Assista ao meu vídeo sobre o .NET Framework e o tempo de execução CLR para C#

Linguagem de programação C#é relativamente novo, mas já conquistou confiança. O lançamento da primeira versão ocorreu em fevereiro de 2002. A versão mais recente da linguagem no momento em que este artigo foi escrito é C# 7.2, lançada em 16 de agosto de 2017.

A sintaxe da linguagem C#, como o nome sugere, faz parte da família de linguagens semelhantes a C e é semelhante a outras linguagens populares deste grupo (C++, Java). Portanto, se você já estiver familiarizado com uma dessas linguagens, será muito mais fácil dominar a linguagem de programação C#.

Como C# é uma linguagem orientada a objetos, ela oferece suporte a herança, polimorfismo, encapsulamento, tipagem forte de variáveis, sobrecarga de operadores e muito mais. Todos esses conceitos serão discutidos em detalhes em artigos subsequentes. Graças ao uso do paradigma de design orientado a objetos usando uma linguagem de programação, é bastante fácil desenvolver projetos flexíveis e de grande escala. Ao mesmo tempo, novas versões da linguagem C# são lançadas regularmente, adicionando novas funcionalidades para simplificar a vida do desenvolvedor, aumentar a velocidade de desenvolvimento e melhorar o desempenho e a confiabilidade do aplicativo.

Plataforma .NET

Estrutura .NET é uma plataforma de software da empresa Microsoft permitindo o desenvolvimento em diversas linguagens de programação, já que todas as linguagens utilizam um único ambiente de execução de linguagem comum Tempo de execução de linguagem comum (CLR). Assim, as principais capacidades da plataforma .NET são:

  • Plataforma cruzada–.NET Framework suportado pela maioria dos sistemas operacionais modernos Windows, sendo também possível criar aplicações suportadas por sistemas Linux, e até aplicações móveis.
  • Multilíngue– como o código-fonte escrito na linguagem de programação utilizada é traduzido para código Common Intermediate Language (CIL), torna-se possível desenvolver em qualquer linguagem de programação suportada, e até mesmo utilizar diferentes linguagens de programação em uma única solução. As linguagens suportadas mais populares são C#, VB.NET, C++, F#.
  • Extensa biblioteca de classes e tecnologias– existe um grande número de bibliotecas prontas para usar para resolver os problemas necessários. Muitas vezes não há necessidade de implementar a lógica de baixo nível da aplicação, basta usar uma solução pronta, convenientemente fornecida através do gerenciador de pacotes nuget; Além disso, a plataforma .NET permite o fácil desenvolvimento de praticamente qualquer tipo de software necessário.

Código gerenciado e não gerenciado. Compilação JIT

Código gerenciadoé um código gerenciado pelo Common Language Runtime (CLR). Isso significa que o ambiente de controle tem a capacidade de pausar a execução de uma aplicação e obter informações específicas sobre o estado da aplicação a qualquer momento durante sua execução. O código fonte da linguagem de programação utilizada é traduzido em código CIL controlado (também chamado de assembler de alto nível).

Após a criação de uma biblioteca de classes ou aplicativo, o código-fonte continua a ser armazenado em CIL. E quando você inicia um aplicativo ou acessa uma biblioteca, o Just-In-Time é executado ( JIT) compilação da aplicação em código de máquina específico para o ambiente em que a aplicação é executada. Neste caso, uma característica importante é que apenas a parte da aplicação ou biblioteca que é acessada (e as conexões, claro) é compilada. Isso permite aumentar o desempenho do sistema e economizar recursos.

Código não gerenciado- Este é o código que é traduzido diretamente em código executável pela máquina e executado diretamente pelo sistema operacional.

Além disso, recomendo a leitura do artigo. E também inscreva-se no grupo VKontakte, Telegram e canal no YouTube. Existem coisas ainda mais úteis e interessantes para programadores.

NET Framework serve como um ambiente para suporte, desenvolvimento e execução de aplicativos distribuídos baseados em componentes (controles).

As aplicações (programas) podem ser desenvolvidas em diferentes linguagens de programação que suportam esta tecnologia.

NET Framework fornece:

  • uso conjunto de diferentes linguagens de programação;
  • segurança e portabilidade de programas;
  • modelo geral de programação baseado na plataforma Windows.

2. Quais são os principais componentes do .NET Framework?

Do ponto de vista da programação, o .NET Framework consiste em dois componentes principais:

  • ambiente de execução de linguagem comum CLR (Common Language Runtime);
  • biblioteca de classes base.

O Common Language Runtime (CLR) resolve os problemas de descoberta automática de tipos .NET, carregamento desses tipos e gerenciamento deles. O CLR lida com gerenciamento de memória, manutenção de aplicativos, processamento de threads e implementa diversas verificações relacionadas à segurança.

A biblioteca de classes base inclui a definição de diversas primitivas, que podem ser: streams, APIs gráficas, implementações de banco de dados, E/S de arquivos, etc.

3. Qual é o princípio de funcionamento do Common Language Runtime (CLR)?

O Common Language Runtime (CLR) gerencia a execução do código .NET.

Após compilar um programa em C# (ou outra linguagem), é criado um arquivo que contém um tipo especial de pseudocódigo ou bytecode (e não um arquivo executável, como era antes). Este pseudocódigo é denominado (MSIL) ou Common Intermediate Language (CIL). Este pseudocódigo é o Microsoft Intermediate Language.

O principal objetivo do CLR é transformar código MSIL intermediário em código executável durante a execução do programa.

Qualquer programa compilado em pseudocódigo MSIL pode ser executado em qualquer ambiente que contenha uma implementação do CLR. Isso permite que os programas sejam portáveis ​​dentro do .NET Framework.

Arroz. 1. O processo de conversão do código-fonte em código MSIL (CIL ou IL) e criação de um arquivo assembly (*.dll ou *.exe)

Depois disso, o pseudocódigo se transforma em código executável. Isso é feito pelo compilador JIT. A compilação JIT (Just-in-time) é uma compilação dinâmica.

O CLR é responsável por determinar onde colocar o assembly.

O tipo solicitado colocado no assembly (como uma classe ArrayList ou outro tipo) é determinado no arquivo binário (*.dll ou *.exe) lendo os metadados do arquivo.

O CLR então coloca o tipo lido do assembly na memória.

O CLR então transforma o código CIL em instruções apropriadas que são adaptadas à plataforma específica (dependendo do PC, sistema operacional, etc.). Além disso, nesta fase são realizadas as verificações de segurança necessárias.

A última coisa a fazer é executar o código do programa solicitado.

4. O que é linguagem intermediária MSIL ( Idioma intermediário da Microsoft) ou CIL (Linguagem Intermediária Comum)?

A princípio, a linguagem intermediária de pseudocódigo foi chamada Idioma intermediário da Microsoft(MSIL). Posteriormente (nas versões mais recentes do .NET) esse nome foi alterado para Common Intermediate Language (CIL - Common Intermediate Language). As abreviaturas MSIL, CIL e IL (Intermediate Language) significam a mesma coisa.

A linguagem intermediária CIL (ou MSIL) é formada após a compilação de um programa em alguma linguagem de programação que suporte o .NET Framework.

MSIL é pseudocódigo. MSIL define um conjunto de instruções que:

  • pode ser transferido para diferentes plataformas;
  • não dependem de um processador específico.

Na verdade, MSIL é linguagem assembly portátil

5. O que é um assembly do ponto de vista da tecnologia .NET?

Assemblies são arquivos com extensões *.dll ou *.exe que contêm instruções de linguagem intermediária (IL) independentes da plataforma .NET, bem como metadados de tipo.

A montagem é criada usando o compilador .NET. Um assembly é um grande objeto binário.

A montagem foi projetada para preservar namespaces. Namespaces contêm tipos. Os tipos podem ser classes, delegados, interfaces, enumerações, estruturas.

Um assembly pode conter qualquer número de namespaces. Qualquer namespace pode conter qualquer número de tipos (classes, interfaces, estruturas, enumerações, delegados).

6. O que está incluído nas montagens?

Os assemblies contêm código CIL (código MSIL ou código IL) e metadados.

O código CIL é compilado para uma plataforma específica somente se for acessado no tempo de execução do .NET.

Os metadados descrevem detalhadamente os recursos de cada tipo existente em uma determinada unidade binária .NET.

Por exemplo Quando você cria um aplicativo Windows Forms em C#, um arquivo Assembly.info é criado. Este arquivo está localizado na subpasta Propriedades relativa à pasta principal do programa. Este arquivo fornece informações gerais sobre a montagem.

7. O que é um manifesto?

Manifestoé uma descrição do próprio assembly usando metadados.

O manifesto contém as seguintes informações:

  • sobre a versão atual da montagem;
  • informações sobre cultura (localização de recursos lineares e gráficos);
  • uma lista de links para todos os assemblies externos necessários para o funcionamento adequado.

8. Diagrama da interação entre o código-fonte, o compilador .NET e o mecanismo de tempo de execução .NET.

O programador cria o código-fonte da aplicação em uma linguagem que suporta a tecnologia .NET (C#, C++/CLI, Visual Basic .NET, etc.). A aplicação é criada em algum ambiente de programação, como o Microsoft Visual Studio. O compilador gera um assembly - um arquivo que contém instruções CIL, metadados e um manifesto.

Depois de executar este aplicativo em um determinado computador (determinada plataforma), o mecanismo de tempo de execução .NET é iniciado. Primeiramente, uma das versões (pelo menos) do .NET Framework deve estar instalada no computador.

Se o código-fonte usar bibliotecas de classes base (por exemplo, do assembly mscorlib.dll), elas serão carregadas usando o carregador de classes.

O compilador JIT compila o assembly levando em consideração (vinculando) os recursos de hardware e software do computador no qual o aplicativo está sendo executado.

Depois disso, o aplicativo é executado.

Figura 2. Relacionamento entre código-fonte, compilador e mecanismo de tempo de execução .NET

9. Que tipos de montagens existem?

Existem dois tipos de montagens:

  • montagens de arquivo único;
  • montagens de vários arquivos.

Um assembly que consiste em um único módulo (*.dll ou *.exe) é chamado de arquivo único. Os assemblies de arquivo único colocam todas as instruções, metadados e manifestos CIL necessários em um pacote bem definido.

Um assembly que consiste em muitos arquivos de código binário .NET é chamado de assembly de vários arquivos. Cada um desses arquivos é chamado de módulo.

Em uma montagem com vários arquivos, um dos módulos é o principal (primário).

10. Qual arquivo contém o assembly principal da biblioteca MS Visual Studio?

A montagem principal está localizada no arquivo “mscorlib.dll”.

11. Qual é o sistema geral de tipo CTS?

CTS (Common Type System) - um sistema de tipos que contém uma descrição completa de todos os tipos de dados e construções de programas possíveis que são suportados pelo CLR do Common Language Runtime. Também descreve como essas entidades podem interagir umas com as outras.

Os tipos podem ser classes, interfaces, estruturas, enumerações, delegados.

12. Qual é o propósito do CLS de especificação de linguagem comum?

Como você sabe, nem todas as linguagens de programação compatíveis com .NET podem suportar a funcionalidade do sistema do tipo CTS. Para tanto, é utilizada a especificação de linguagem comum CLS (Common Language Specification).

O objetivo do CLS é descrever apenas o subconjunto de tipos e construções de programação comuns que são aceitos por absolutamente todas as linguagens de programação que suportam .NET.

13. Quais linguagens de programação suportam a tecnologia .NET?

No sistema de desenvolvimento de aplicativos MS Visual Studio, a tecnologia .NET é suportada pelas seguintes linguagens de programação: C#, Visual Basic .NET, C++/CLI, JScript .NET, F#, J#.

Para poder usar a tecnologia .NET, você precisa instalar software em seu computador Kit de desenvolvimento de software Microsoft .NET Framework(SDK) ou Microsoft Visual Studio de qualquer versão.

14. O que é um espaço para nome?

Um namespace tem como objetivo unir um grupo de tipos que estão relacionados entre si do ponto de vista semântico. Os tipos são colocados em montagens (assembly). Tipos significam classes, delegados, interfaces, estruturas e enumerações.

Exemplos de nomes de namespace:

Sistema Sistema.Dados Sistema.IO Sistema.Collections Sistema.Threading.Tasks

Por exemplo, o namespace System.Data contém os principais tipos para trabalhar com bancos de dados, e o namespace System.Collections contém os principais tipos para trabalhar com coleções.

15. Como exibir o conteúdo de assemblies, namespaces e tipos no MS Visual Studio?

O sistema Microsoft Visual Studio possui um utilitário Object Browser, que é chamado a partir do menu View (Figura 3).

Arroz. 3. Chamando o utilitário Object Browser

Isso abrirá a janela Object Browser, que exibirá as montagens usadas em uma determinada tecnologia.

A Figura 4 mostra uma lista de assemblies exibidos na tecnologia “.NET Framework 4”. Um assembly chamado “mscorlib” é destacado.

Arroz. 4. Janela do navegador de objetos com o assembly mscorlib.dll destacado

Se você expandir o conteúdo do assembly mscorlib (o “ + "), uma lista de todos os namespaces para este assembly será exibida (Figura 5). Como você pode ver na figura, o assembly inclui os namespaces Microsoft.Win32, System, System.Collections, System.Collections.Concurrent e muitos outros.

Arroz. 5. O assembly mscorlib e a lista de namespaces incluídos nele

Qualquer um dos namespaces é expandido da mesma maneira. Namespaces descrevem tipos. Os tipos descrevem métodos, propriedades, constantes, etc.

A Figura 6 mostra a classe BinaryReader do namespace System.IO. Aparentemente, a classe implementa métodos chamados BinaryReader(), Close(), Dispose(), FillBuffer() e outros.

Arroz. 6. Conteúdo da classe BinaryReader

16. Como conectar um namespace em um programa C#?

Para conectar um namespace, use a palavra-chave using

Bom Dia a todos. Alexey Gulynin está em contato. Neste primeiro artigo sobre C#, gostaria de falar sobre a plataforma Estrutura .NET. A linguagem C# e a própria plataforma apareceram pela primeira vez em 2002. O principal objetivo de sua criação foi fornecer um modelo de programação mais simples, mais escalável e, o mais importante, mais poderoso em comparação com o modelo de programação COM. Com base na plataforma .NET Framework, você pode construir aplicativos para a família de sistemas operacionais Windows e também pode construir aplicativos para Unix, Linux, Mac OS X. Abaixo está um resumo; lista de recursos suportados pelo .NET Framework:

1) Capacidade de interagir com código existente. Esse recurso permite compilar, por exemplo, binários COM e componentes .NET.
2) Suporte para diversas linguagens de programação. Os aplicativos .NET podem ser criados usando diferentes linguagens de programação, como C#, Visual Basic, F#.
3) Mecanismo geral de execução. A questão aqui é que o .NET possui um conjunto específico de tipos que toda linguagem que suporta .NET pode entender.
4) Integração de idiomas. Você pode escrever uma classe em Visual Basic e estendê-la em C#.
5) Grande biblioteca de classes básicas. Graças a esta biblioteca, podemos esquecer as complexidades da implementação de chamadas de baixo nível para APIs e focar simplesmente na programação.
6) Modelo de implantação simples. Ao contrário de uma biblioteca COM, o .NET não precisa ser registrado no registro. Ele pode existir como um assembly.dll.

Talvez aqui eu tenha escrito sobre algumas coisas incompreensíveis, por exemplo, classes, interfaces de API. Não vale a pena se preocupar com isso ainda. A princípio você pode programar sem saber de tudo isso, mas da forma que aprendemos, vamos diluir um pouco a prática com a teoria.
Para encerrar completamente a teoria, falarei sobre os principais blocos de construção da plataforma .NET:

1) CLR (Common Language Runtime) - um ambiente de tempo de execução de linguagem comum. A principal tarefa deste ambiente é carregar e gerenciar objetos .NET (para que o programador não precise fazer isso manualmente). Além disso, o CLR cuida de vários detalhes de baixo nível, como gerenciamento de memória, posicionamento de aplicativos e execução de verificações relacionadas à segurança de aplicativos.
2) CTS (Common Type System) - um sistema de tipo comum. Descreve todos os tipos de dados possíveis suportados pelo tempo de execução (CLR). Você precisa estar ciente de que uma única linguagem pode não suportar absolutamente todos os recursos definidos pela especificação CTS. Portanto existe:
3) CLS (especificação de linguagem comum). Ele descreve um subconjunto de tipos e construções de programação comuns que todas as linguagens de programação do .NET Framework devem suportar.

Além das especificações CLR e CTS/CLS, a plataforma .NET fornece biblioteca de classes base, que está disponível para todas as linguagens de programação .NET. Esta biblioteca permite gerenciar, por exemplo, E/S de arquivos, gráficos, vários dispositivos externos, fluxos de dados e vários serviços em alto nível (sem pensar em detalhes de implementação).

Não sou mestre em escrever teoria, então direi que para quem deseja entender melhor a filosofia do .NET, recomendo a leitura do primeiro capítulo do livro de Andrew Troelsen “The C# 5.0 Programming Language and the .NET 4.5 Platform, publicado em 2013.” Este resumo da plataforma .NET foi retirado deste livro. O problema que encontrei com este livro foi que era difícil para um iniciante entendê-lo. Você pode pensar que não, esta é apenas a minha opinião.

Bem, meus amigos, vocês ainda queriam aprender C#? Então vamos seguir em frente com ousadia, prometo que no futuro haverá um mínimo de artigos teóricos (mesmo que apenas no início do aprendizado de C#), apenas uma prática. Se você precisa de uma teoria, fume o livro de Andrew Troelsen.
E então, se você precisar de alguma informação sobre uma classe ou seu método, vá direto para

O .NET Framework é um dos componentes do sistema Windows. Ele permite que você crie e use aplicativos de última geração. Objetivo da plataforma Estrutura .NET :

  • criação de uma visão holística ambiente de programação orientado a objetos permitindo diversas opções de implementação: o código pode ser armazenado e executado localmente; ser executado localmente e distribuído pela Internet; ou realizado remotamente;
  • Fornecer um ambiente de execução de código que minimize a implantação de software e conflitos de versão;
  • garantir a segurança da execução de código no ambiente - incluindo código criado por um desenvolvedor desconhecido ou parcialmente confiável;
  • fornecimento de um ambiente de tempo de execução de código para resolver problemas de desempenho em scripts ou ambientes baseados em interpretação;
  • unificação do trabalho dos desenvolvedores em aplicações completamente diferentes: tanto em aplicações Windows quanto em aplicações web;
  • o uso de padrões da indústria em todas as áreas de troca de dados e, como resultado, garantindo a compatibilidade do código criado no .NET Framework com outros programas.