Partilhar via


Visão geral do Common Language Runtime (CLR)

O .NET fornece um ambiente de tempo de execução chamado Common Language Runtime que executa o código e fornece serviços que facilitam o processo de desenvolvimento.

Compiladores e ferramentas expõem a funcionalidade do Common Language Runtime e permitem que você escreva código que se beneficia do ambiente de execução gerenciado. O código que você desenvolve com um compilador de linguagem que tem como alvo o tempo de execução é chamado de código gerenciado. O código gerenciado se beneficia de recursos como integração entre idiomas, tratamento de exceções entre idiomas, segurança aprimorada, suporte a controle de versão e implantação, um modelo simplificado para interação de componentes e serviços de depuração e criação de perfil.

Nota

Compiladores e ferramentas podem produzir saídas que o Common Language Runtime pode consumir porque o sistema de tipos, o formato de metadados e o ambiente de tempo de execução (o sistema de execução virtual) são definidos por um padrão público, a especificação ECMA Common Language Infrastructure. Para obter mais informações, consulte ECMA C# e Common Language Infrastructure Specifications.

Para habilitar o tempo de execução para fornecer serviços para código gerenciado, os compiladores de linguagem devem emitir metadados que descrevem os tipos, membros e referências em seu código. Os metadados são armazenados com o código; cada arquivo executável portátil (PE) carregável do Common Language Runtime contém metadados. O tempo de execução usa metadados para localizar e carregar classes, dispor instâncias na memória, resolver invocações de método, gerar código nativo, impor segurança e definir limites de contexto em tempo de execução.

O tempo de execução lida automaticamente com o layout de objetos e gerencia referências a objetos, liberando-os quando eles não estão mais sendo usados. Os objetos cujos tempos de vida são gerenciados dessa maneira são chamados de dados gerenciados. A recolha de lixo elimina fugas de memória e alguns outros erros de programação comuns. Se seu código for gerenciado, você poderá usar dados gerenciados, não gerenciados ou gerenciados e não gerenciados em seu aplicativo .NET. Como os compiladores de linguagem fornecem seus próprios tipos, como tipos primitivos, talvez nem sempre você saiba ou precise saber se seus dados estão sendo gerenciados.

O Common Language Runtime facilita o design de componentes e aplicativos cujos objetos interagem entre idiomas. Objetos escritos em diferentes idiomas podem se comunicar uns com os outros, e seus comportamentos podem ser fortemente integrados. Por exemplo, você pode definir uma classe e, em seguida, usar um idioma diferente para derivar uma classe da sua classe original ou chamar um método na classe original. Você também pode passar uma instância de uma classe para um método de uma classe escrita em um idioma diferente. Essa integração entre linguagens é possível porque compiladores de linguagem e ferramentas que visam o tempo de execução usam um sistema de tipo comum definido pelo tempo de execução. Eles seguem as regras do tempo de execução para definir novos tipos e para criar, usar, persistir e vincular a tipos.

Como parte de seus metadados, todos os componentes gerenciados carregam informações sobre os componentes e recursos com os quais foram construídos. O tempo de execução usa essas informações para garantir que seu componente ou aplicativo tenha as versões especificadas de tudo o que precisa, o que torna seu código menos provável de quebrar devido a alguma dependência não atendida. As informações cadastrais e os dados estaduais não são mais armazenados no registro, onde podem ser difíceis de estabelecer e manter. Em vez disso, as informações sobre os tipos definidos e suas dependências são armazenadas com o código como metadados. Dessa forma, a tarefa de replicação e remoção de componentes é menos complicada.

Os compiladores e ferramentas de linguagem expõem a funcionalidade do tempo de execução de maneiras que se destinam a ser úteis e intuitivas para os desenvolvedores. Alguns recursos do tempo de execução podem ser mais percetíveis em um ambiente do que em outro. Como você experimenta o tempo de execução depende de quais compiladores de linguagem ou ferramentas você usa. Por exemplo, se você for um desenvolvedor do Visual Basic, poderá notar que, com o Common Language Runtime, a linguagem do Visual Basic tem mais recursos orientados a objeto do que antes. O tempo de execução fornece os seguintes benefícios:

  • Melhorias de desempenho.

  • A capacidade de usar facilmente componentes desenvolvidos em outras línguas.

  • Tipos extensíveis fornecidos por uma biblioteca de classes.

  • Recursos de linguagem como herança, interfaces e sobrecarga para programação orientada a objetos.

  • Suporte para threading livre explícito que permite a criação de aplicativos multithreaded e escaláveis.

  • Suporte para tratamento estruturado de exceções.

  • Suporte para atributos personalizados.

  • Recolha de lixo.

  • Uso de delegados em vez de ponteiros de função para maior segurança e proteção do tipo. Para obter mais informações sobre delegados, consulte Common Type System.

Versões CLR

As versões do .NET Core e do .NET 5+ têm uma única versão do produto, ou seja, não há uma versão CLR separada. Para obter uma lista de versões do .NET Core, consulte Download do .NET Core.

No entanto, o número de versão do .NET Framework não corresponde necessariamente ao número da versão do CLR que ele inclui. Para obter uma lista de versões do .NET Framework e suas versões CLR correspondentes, consulte Versões e dependências do .NET Framework.

Title Description
Processo de Execução Gerenciado Descreve as etapas necessárias para aproveitar o Common Language Runtime.
Gestão Automática de Memória Descreve como o coletor de lixo aloca e libera memória.
Visão geral do .NET Framework Descreve os principais conceitos do .NET Framework, como o sistema de tipo comum, interoperabilidade entre linguagens, execução gerenciada, domínios de aplicativo e assemblies.
Sistema de tipo comum Descreve como os tipos são declarados, usados e gerenciados no tempo de execução para dar suporte à integração entre idiomas.