Introducción a Common Language RuntimeCommon Language Runtime (CLR) overview

.NET Framework proporciona un entorno en tiempo de ejecución denominado Common Language Runtime, que ejecuta el código y proporciona servicios que facilitan el proceso de desarrollo.The .NET Framework provides a run-time environment called the common language runtime, which runs the code and provides services that make the development process easier.

Los compiladores y las herramientas exponen la funcionalidad de Common Language Runtime y permiten escribir código con las ventajas que proporciona este entorno de ejecución administrado.Compilers and tools expose the common language runtime's functionality and enable you to write code that benefits from this managed execution environment. El código desarrollado con un compilador de lenguaje orientado al tiempo de ejecución se denomina código administrado. Este código se beneficia de características como: la integración entre lenguajes, el control de excepciones entre lenguajes, la seguridad mejorada, la compatibilidad con la implementación y las versiones, un modelo simplificado de interacción y servicios de generación de perfiles y depuración.Code that you develop with a language compiler that targets the runtime is called managed code; it benefits from features such as cross-language integration, cross-language exception handling, enhanced security, versioning and deployment support, a simplified model for component interaction, and debugging and profiling services.

Nota

Los compiladores y las herramientas pueden generar resultados que Common Language Runtime puede consumir porque el sistema de tipos, el formato de metadatos y el entorno en tiempo de ejecución (el sistema de ejecución virtual) están todos definidos según un estándar público, la especificación Common Language Infrastructure de ECMA.Compilers and tools are able to produce output that the common language runtime can consume because the type system, the format of metadata, and the runtime environment (the virtual execution system) are all defined by a public standard, the ECMA Common Language Infrastructure specification. Para obtener más información, consulte ECMA C# and Common Language Infrastructure Specifications (Especificaciones de ECMA C# y Common Language Infrastructure).For more information, see ECMA C# and Common Language Infrastructure Specifications.

Para permitir al motor en tiempo de ejecución proporcionar servicios al código administrado, los compiladores de lenguajes deben emitir metadatos que describen los tipos, los miembros y las referencias del código.To enable the runtime to provide services to managed code, language compilers must emit metadata that describes the types, members, and references in your code. Los metadatos se almacenan con el código; cada archivo ejecutable portable (PE) de Common Language Runtime cargable contiene metadatos.Metadata is stored with the code; every loadable common language runtime portable executable (PE) file contains metadata. El motor en tiempo de ejecución utiliza los metadatos para localizar y cargar clases, colocar instancias en memoria, resolver invocaciones a métodos, generar código nativo, exigir mecanismos de seguridad y establecer los límites del contexto en tiempo de ejecución.The runtime uses metadata to locate and load classes, lay out instances in memory, resolve method invocations, generate native code, enforce security, and set run-time context boundaries.

El tiempo de ejecución controla automáticamente la disposición de los objetos y administra las referencias a éstos, liberándolos cuando ya no se utilizan.The runtime automatically handles object layout and manages references to objects, releasing them when they are no longer being used. Los objetos cuya duración se administra de esta forma se denominan datos administrados.Objects whose lifetimes are managed in this way are called managed data. La recolección de elementos no utilizados elimina pérdidas de memoria así como otros errores habituales de programación.Garbage collection eliminates memory leaks as well as some other common programming errors. Con un código administrado se pueden utilizar datos administrados, datos no administrados o estos dos tipos de datos en una aplicación .NET Framework.If your code is managed, you can use managed data, unmanaged data, or both managed and unmanaged data in your .NET Framework application. Como los compiladores de lenguajes proporcionan sus propios tipos, como tipos primitivos, no siempre se sabe (o no es necesario saber) si los datos se están administrando.Because language compilers supply their own types, such as primitive types, you might not always know (or need to know) whether your data is being managed.

Common Language Runtime facilita el diseño de los componentes y de las aplicaciones cuyos objetos interactúan entre lenguajes distintos.The common language runtime makes it easy to design components and applications whose objects interact across languages. Los objetos escritos en lenguajes diferentes pueden comunicarse entre sí, lo que permite integrar sus comportamientos de forma precisa.Objects written in different languages can communicate with each other, and their behaviors can be tightly integrated. Por ejemplo, puede definir una clase y, a continuación, utilizar un lenguaje diferente para derivar una clase de la clase original o llamar a un método de la clase original.For example, you can define a class and then use a different language to derive a class from your original class or call a method on the original class. También se puede pasar al método de una clase una instancia de una clase escrita en un lenguaje diferente.You can also pass an instance of a class to a method of a class written in a different language. Esta integración entre lenguajes diferentes es posible porque los compiladores y las herramientas de lenguajes orientados al motor en tiempo de ejecución utilizan un sistema de tipos común definido por el motor en tiempo de ejecución, y los lenguajes siguen las reglas en tiempo de ejecución para definir nuevos tipos, así como para crear, utilizar, almacenar y enlazar tipos.This cross-language integration is possible because language compilers and tools that target the runtime use a common type system defined by the runtime, and they follow the runtime's rules for defining new types, as well as for creating, using, persisting, and binding to types.

Como parte de los metadatos, todos los componentes administrados contienen información sobre los componentes y los recursos utilizados en su compilación.As part of their metadata, all managed components carry information about the components and resources they were built against. El motor en tiempo de ejecución utiliza esta información para garantizar que el componente o la aplicación contiene las versiones especificadas de todo lo necesario, por lo que hay menos posibilidades de que la ejecución del código se interrumpa debido a una dependencia inadecuada.The runtime uses this information to ensure that your component or application has the specified versions of everything it needs, which makes your code less likely to break because of some unmet dependency. La información de registro y los datos de estado ya no se almacenan en el Registro, donde puede ser difícil establecer y mantener datos.Registration information and state data are no longer stored in the registry where they can be difficult to establish and maintain. En su lugar, la información sobre tipos definidos por el usuario (y sus dependencias) se almacena con el código como metadatos y, de este modo, las tareas de replicación y eliminación de componentes es mucho menos complicada.Instead, information about the types you define (and their dependencies) is stored with the code as metadata, making the tasks of component replication and removal much less complicated.

Las herramientas y los compiladores de lenguajes exponen la funcionalidad del motor en tiempo de ejecución de forma que resulte útil e intuitiva para los programadores.Language compilers and tools expose the runtime's functionality in ways that are intended to be useful and intuitive to developers. Esto significa que algunas características en tiempo de ejecución pueden ser más evidentes en un entorno que en otro.This means that some features of the runtime might be more noticeable in one environment than in another. El funcionamiento del motor en tiempo de ejecución depende de las herramientas y los compiladores utilizados.How you experience the runtime depends on which language compilers or tools you use. Por ejemplo, un programador de Visual Basic observará que con Common Language Runtime, el lenguaje Visual Basic contiene más características orientadas a objetos que antes.For example, if you are a Visual Basic developer, you might notice that with the common language runtime, the Visual Basic language has more object-oriented features than before. El motor en tiempo de ejecución ofrece las siguientes ventajas:The runtime provides the following benefits:

  • Mejoras en el rendimiento.Performance improvements.

  • Capacidad para utilizar fácilmente componentes desarrollados en otros lenguajes.The ability to easily use components developed in other languages.

  • Tipos extensibles que proporciona una biblioteca de clasesExtensible types provided by a class library.

  • Características del lenguaje como herencia, interfaces y sobrecarga para la programación orientada a objetos.Language features such as inheritance, interfaces, and overloading for object-oriented programming.

  • Compatibilidad con subprocesamiento libre explícito que permite la creación de aplicaciones multiproceso escalables.Support for explicit free threading that allows creation of multithreaded, scalable applications.

  • Compatibilidad con el control de excepciones estructurado.Support for structured exception handling.

  • Compatibilidad con atributos personalizados.Support for custom attributes.

  • Recolección de elementos no utilizados.Garbage collection.

  • Emplee delegados en lugar de punteros a funciones para mayor seguridad y protección de tipos.Use of delegates instead of function pointers for increased type safety and security. Para más información acerca de los delegados, consulte Common Type System.For more information about delegates, see Common Type System.

Versiones de CLRCLR versions

El número de versión de .NET Framework no se corresponde necesariamente con el número de versión del CLR que incluye.The version number of the .NET Framework doesn't necessarily correspond to the version number of the CLR it includes. En la tabla siguiente se muestra cómo se correlacionan ambos números de versión.The following table shows how the two version numbers correlate.

Versión de .NET Framework.NET Framework version Incluye la versión de CLRIncludes CLR version
1.01.0 1.01.0
1.11.1 1.11.1
2.02.0 2.02.0
3.03.0 2.02.0
3.53.5 2.02.0
44 44
4.5 (incluidas 4.5.1 y 4.5.2)4.5 (including 4.5.1 and 4.5.2) 44
4.6 (incluidas 4.6.1 y 4.6.2)4.6 (including 4.6.1 and 4.6.2) 44
4.7 (incluidas 4.7.1 y 4.7.2)4.7 (including 4.7.1 and 4.7.2) 44
TitleTitle DescripciónDescription
Proceso de ejecución administradaManaged Execution Process Describe los pasos requeridos para aprovechar al máximo las ventajas de Common Language Runtime.Describes the steps required to take advantage of the common language runtime.
Administración automática de la memoriaAutomatic Memory Management Describe cómo asigna y libera memoria el recolector de elementos no utilizados.Describes how the garbage collector allocates and releases memory.
Información general acerca de .NET FrameworkOverview of the .NET Framework Describe conceptos clave de .NET Framework como Common Type System (CTS), interoperabilidad entre lenguajes, ejecución administrada, dominios de aplicación y ensamblados.Describes key .NET Framework concepts such as the common type system, cross-language interoperability, managed execution, application domains, and assemblies.
Sistema de tipos comunesCommon Type System Describe cómo declarar, usar y administrar tipos en el motor en tiempo de ejecución para permitir la integración entre lenguajes.Describes how types are declared, used, and managed in the runtime in support of cross-language integration.

Vea tambiénSee also