Background Image
TECNOLOGÍA

Constructores primarios (C# 12 Syntactic Sugar): Una Guía

Chris Powell
Senior Consultant

February 6, 2024 | 4 Minuto(s) de lectura

Con la introducción de .Net8 y C#12 en noviembre de 2023, hubo muchos cambios significativos en .NET y C#. Una de estas características en C#12 es el concepto de Constructor Primario. Un constructor Primary reemplaza a un constructor de clase con parámetros en la clase. Los parámetros para el constructor están disponibles en cualquier parte del cuerpo de la clase.

Con Constructor primario:

Asset - Image 1 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Es importante tener en cuenta que los parámetros de clase son no campos de la clase. El siguiente código no compilará si se utiliza en SimpleClass, ya que foo y bar no están disponibles en "this".

Asset - Image 2 Primary Constructors (C# 12 Syntactic Sugar): A Guide

El uso de un Constructor Primario puede mejorar significativamente la legibilidad de su código, ya que elimina gran parte de la infraestructura de código alrededor de los constructores de clase. Por ejemplo, compara cuánto más fácil de leer es SimpleClass, con la clase funcionalmente equivalente que no utiliza un Constructor Primario.

Sin Constructor Primario:

Asset - Image 3 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Los Primary Constructors también pueden ser usados en tipos "struct" y "record". Esto puede facilitar la creación y mantenimiento de DTO's... Por ejemplo.

Asset - Image 4 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Sugerimos tener en cuenta lo siguiente cuando se utiliza un Primary Constructor:

Los parámetros de clase no están directamente disponibles para las clases hijas. Así, el siguiente código no compilará, ya que bar y foo no están disponibles para la clase hija, SimpleChildClass.

Asset - Image 5 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Si desea anular el constructor, los parámetros de clase deben incluirse en deben incluirse. Para incluir los parámetros de la clase, debe utilizar this() en el constructor anulado. Si su clase tiene múltiples constructores anulados, utilizar un constructor primario puede no ser la mejor solución.

Asset - Image 6 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Los parámetros de clase no campos de sólo lectura. Si está utilizando estos parámetros directamente con inyección de dependencia, es posible causar efectos secundarios que causarán errores en tiempo de ejecución. Por ejemplo:

Asset - Image 7 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Si FooUp() es llamado antes que FooBar(), entonces una NullReferenceException será lanzada por FooBar(). Es mejor utilizar un campo de sólo lectura junto con el Constructor Primario.

Asset - Image 8 Primary Constructors (C# 12 Syntactic Sugar): A Guide

Esta clase no compilará porque _logger es de sólo lectura y FooUp no puede asignar un valor a _logger, evitando así que FooBar lance una NullReferenceException. Los constructores primarios son una buena forma de azúcar sintáctico que se ha añadido a C#12, que tiene la promesa de hacer sus clases un poco más fáciles de leer y ahorrar algo de código constructor repetitivo. No son adecuados para todas las situaciones, sin embargo, y se debe tener cuidado al utilizar estos parámetros en su código. A los desarrolladores de Improving les apasiona lo que hacen. Son extremadamente versados en todas las áreas de codificación y desarrollo de aplicaciones. ¿Cuándo fue la última vez que actualizaste tus aplicaciones? En este blog podemos ver que los cambios se producen con rapidez, lo que significa que las aplicaciones pueden quedar desfasadas rápidamente. Adelantarse a estos cambios es esencial para mantener un rendimiento adecuado de sus aplicaciones. Si sus aplicaciones no están actualizadas rellene este formulario y alguien se pondrá en contacto con usted.

Tecnología

Reflexiones más recientes

Explore las entradas de nuestro blog e inspírese con los líderes de opinión de todas nuestras empresas.
Asset - Image 1 Data Storage in a Concurrent World 
DATOS

Data Storage in a Concurrent World 

Data storage and event ordering in concurrent systems can spark challenges, but there are ways to be prepared.