C# Versión 9.0 | |
Publicado en noviembre de 2020 | |
C# 9 se lanzó con .NET 5. Es la versión de lenguaje predeterminada para cualquier ensamblado destinado a la versión .NET 5. Contiene las siguientes características nuevas y mejoradas: | |
⮚Registros | |
⮚Configuradores de solo inicio | |
⮚Declaraciones de nivel superior | |
⮚Mejoras en la coincidencia de patrones: patrones relacionales a> y patrones lógicos | |
⮚Rendimiento e interoperabilidad< /a> | |
⮚Enteros de tamaño nativo | |
⮚Punteros de función | |
⮚Suprimir la emisión del indicador localsinit | |
⮚Inicializadores de módulo | |
⮚Nuevas funciones para métodos parciales | |
⮚Funciones de ajuste y acabado | |
⮚Nuevas expresiones escritas en destino | |
⮚funciones estáticas anónimas | |
⮚Expresiones condicionales escritas en destino | |
⮚Tipos de retorno covariantes | |
⮚Extensión GetEnumerator compatible con bucles foreach | |
⮚Parámetros de descarte de Lambda | |
⮚Atributos de funciones locales | |
C# 9 continúa con tres de los temas de versiones anteriores: eliminar la ceremonia, separar los datos de los algoritmos y proporcionar más patrones en más lugares. | |
Las declaraciones de nivel superior significan que su programa principal es más sencillo de leer. Hay menos necesidad de ceremonias: un espacio de nombres, una clase de programa y Main() son innecesarios. | |
La introducción de registros proporciona una sintaxis concisa para los tipos de referencia que siguen la semántica de valores para la igualdad. Utilizará estos tipos para definir contenedores de datos que normalmente definen un comportamiento mínimo. Los configuradores de solo inicio brindan la capacidad de realizar mutaciones no destructivas (con expresiones) en los registros. C# 9 también agrega tipos de retorno covariantes para que los registros derivados puedan anular los métodos virtuales y devolver un tipo derivado del tipo de retorno del método base. | |
Las capacidades de coincidencia de patrones se han ampliado de varias maneras. Los tipos numéricos ahora admiten patrones de rango. Los patrones se pueden combinar usando y, o, y no patrones. Se pueden agregar paréntesis para aclarar patrones más complejos: | |
C# 9 incluye nuevas mejoras en la coincidencia de patrones: | |
⮚Los patrones de tipo coinciden con un objeto coincide con un tipo particular | |
⮚Los patrones entre paréntesis refuerzan o enfatizan la precedencia de las combinaciones de patrones | |
⮚Conjuntivo y patrones requieren que ambos patrones coincidan | |
⮚Disyuntivo o patrones requieren que cualquiera de los patrones coincida | |
⮚Los patrones no negados requieren que un patrón no coincida | |
⮚Los patrones relacionales requieren que la entrada sea menor, mayor que, menor o igual, o mayor o igual que una constante determinada. | |
Estos patrones enriquecen la sintaxis de los patrones. Considere estos ejemplos: | |
public static bool IsLetter(this char c) => c is >= 'a' and <= 'z' or >= 'A' and <= 'Z'; |
Con paréntesis opcionales para dejar claro que y tiene mayor prioridad que o: | |
public static bool IsLetterOrSeparator(this char c) => c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ','; |
Uno de los usos más comunes es una nueva sintaxis para una verificación nula: | |
if (e is not null) { // ... } |
Cualquiera de estos patrones se puede utilizar en cualquier contexto donde se permitan patrones: expresiones de patrón is , expresiones de cambio, patrones anidados y el patrón de la etiquetacase de una declaraciónswitch . | |
Otro conjunto de características admite la informática de alto rendimiento en C#: | |
Los tipos nint ynuint modelan los tipos de enteros de tamaño nativo en la CPU de destino. | |
punteros de función proporcionan delegados funcionalidad similar evitando al mismo tiempo las asignaciones necesarias para crear un objeto delegado. | |
La instrucción localsinit se puede omitir para guardar instrucciones. | |
Rendimiento e interoperabilidad | |
Otro conjunto de mejoras admite escenarios en los que los generadores de código agregan funcionalidad: | |
⮚Inicializadores de módulo son métodos que el tiempo de ejecución llama cuando se carga un ensamblado. | |
⮚Métodos parciales admiten nuevos modificadores accesibles y tipos de devolución no nulos. En esos casos, se debe proporcionar una implementación. | |
Características de ajuste y acabado. | |
C# 9 agrega muchas otras pequeñas características que mejoran la productividad del desarrollador, tanto en la escritura como en la lectura de código: | |
⮚ Expresiones nuevas de tipo objetivo | |
⮚ static++p funciones anónimas | |
⮚ Expresiones condicionales de tipo objetivo | |
⮚ Extensión GetEnumerator() compatible con buclesforeach | |
⮚ Las expresiones lambda pueden declarar parámetros de descarte | |
⮚ Los atributos se pueden aplicar a funciones locales. | |
La versión C# 9 continúa el trabajo para mantener C# como un lenguaje de programación moderno y de propósito general. Las funciones siguen siendo compatibles con cargas de trabajo y tipos de aplicaciones modernos. | |