En .NET Framework de Microsoft , el Common Type System ( CTS ) es un estándar que especifica cómo se representan las definiciones de tipos y los valores específicos de los tipos en la memoria de la computadora. Su objetivo es permitir que los programas escritos en diferentes lenguajes de programación compartan información fácilmente. Tal como se usa en los lenguajes de programación , un tipo se puede describir como una definición de un conjunto de valores (por ejemplo, "todos los números enteros entre 0 y 10") y las operaciones permitidas en esos valores (por ejemplo, suma y resta).
La especificación del CTS se encuentra en el estándar ECMA 335, "Particiones I a VI de la Infraestructura de lenguaje común (CLI)". La CLI y el CTS fueron creados por Microsoft, y el marco Microsoft .NET es una implementación del estándar.
Funciones del sistema de tipos comunes
- Establecer un marco que ayude a permitir la integración entre lenguajes, la seguridad de tipos y la ejecución de código de alto rendimiento.
- Proporcionar un modelo orientado a objetos que admita la implementación completa de muchos lenguajes de programación.
- Definir reglas que los lenguajes deben seguir, lo que ayuda a garantizar que los objetos escritos en diferentes lenguajes puedan interactuar entre sí.
- El CTS también define las reglas que garantizan que los tipos de datos de los objetos escritos en varios lenguajes puedan interactuar entre sí.
- El CTS también especifica las reglas para la visibilidad de tipos y el acceso a los miembros de un tipo, es decir, el CTS establece las reglas por las cuales los ensambles forman el alcance de un tipo, y el Common Language Runtime aplica las reglas de visibilidad.
- El CTS define las reglas que rigen la herencia de tipos , los métodos virtuales y la vida útil de los objetos.
- Los lenguajes compatibles con .NET pueden implementar todos o algunos tipos de datos comunes…
Al redondear valores fraccionarios, se utiliza de forma predeterminada el método de redondeo a la mitad ("del banquero") en todo el Framework. Desde la versión 2, el "redondeo aritmético simétrico" (redondeo a la mitad a partir de cero) también está disponible como opción del programador. [1]
- Se utiliza para comunicarse con otros idiomas.
Categorías de tipos
El sistema de tipos común admite dos categorías generales de tipos:
- Tipos de valores
- Los tipos de valor contienen directamente sus datos y las instancias de los tipos de valor se asignan en la pila o en línea en una estructura. Los tipos de valor pueden ser integrados (implementados por el entorno de ejecución), definidos por el usuario o enumeraciones.
- Tipos de referencia
- Los tipos de referencia almacenan una referencia a la dirección de memoria del valor y se asignan en el montón . Los tipos de referencia pueden ser tipos autodescriptivos, tipos de puntero o tipos de interfaz. El tipo de un tipo de referencia se puede determinar a partir de los valores de los tipos autodescriptivos. Los tipos autodescriptivos se dividen a su vez en matrices y tipos de clase. Los tipos de clase son clases definidas por el usuario, tipos de valor en caja y delegados.
El siguiente ejemplo escrito en Visual Basic .NET muestra la diferencia entre tipos de referencia y tipos de valor:
Sistema de Importaciones
Clase Clase1 Valor público como entero = 0 Fin de clase 'Clase1 Clase Prueba Compartida Sub Principal () Dim val1 como entero = 0 Dim val2 como entero = val1 val2 = 123 Dim ref1 como nueva Clase1 () Dim ref2 como Clase1 = ref1 ref2 . Valor = 123 Console . WriteLine ( "Valores: {0}, {1}" , val1 , val2 ) Console . WriteLine ( "Refs: {0}, {1}" , ref1 . Valor , ref2 . Valor ) Fin de sub 'Principal Fin de clase 'Prueba
El resultado del ejemplo anterior
Valores: 0, 123 Referencias: 123, 123
Empaquetado y desempaquetado
Boxeo
La conversión de tipos de valor a tipos de referencia también se conoce como boxing . Como se puede ver en el ejemplo siguiente, no es necesario indicarle al compilador que un Int32 se convierte en un objeto, ya que el compilador se encarga de ello por sí mismo.
Int32 x = 10 ; objeto o = x ; // Boxeo implícito Console . WriteLine ( "El objeto o = {0}" , o ); // imprime "El objeto o = 10"
Sin embargo, un Int32 siempre se puede encasillar explícitamente de esta manera:
Int32 x = 10 ; objeto o = ( objeto ) x ; // Boxing explícito Console . WriteLine ( "El objeto o = {0}" , o ); // imprime "El objeto o = 10"
Desempaquetado
El siguiente ejemplo pretende mostrar cómo desempaquetar un tipo de referencia para volver a convertirlo en un tipo de valor. Primero, se convierte un Int32 en un objeto y, luego, se vuelve a desempaquetar. Tenga en cuenta que para desempaquetar se requiere una conversión explícita.
Int32 x = 5 ; objeto o1 = x ; // Boxeo implícito x = ( int ) o1 ; // Unboxing explícito
Véase también
Referencias
- ^ "Enumeración de redondeo de punto medio". Microsoft Docs .
Enlaces externos
- Guía para desarrolladores de Microsoft que describe el CTS
- Tipos integrados en .NET Framework
