Evolución de C# de la versión 6 al 10

Resumen

La evolución de C# desde 2010 hasta hoy transformó por completo la forma de escribir código en .NET. Si vienes programando con sintaxis antigua, conocer estas mejoras te permite escribir menos líneas, ganar legibilidad y aprovechar el ritmo anual de nuevas versiones que el lenguaje adoptó desde 2017.

¿Cómo se relacionan las versiones de C# con .NET?

La historia del lenguaje se divide en dos etapas claras: una lenta y otra acelerada. Y entender esa línea de tiempo te ayuda a elegir qué sintaxis puedes usar según tu runtime.

En la primera etapa, C# 4 salió en abril de 2010 junto con .NET Framework 4 [1:00]. Mucho del código que todavía circula en producción nació ahí. La versión 6 llegó con .NET Framework 4.6 y, sobre todo, con el estreno de .NET Core 1.0, el framework open source que hoy se usa en cursos y proyectos modernos.

La segunda etapa empieza en 2017, cuando C# pasó a publicar una versión nueva casi cada año [2:10]: C# 8 en 2019, C# 9 en 2020, y así sucesivamente. La regla práctica es directa.

  • Para usar C# 9 necesitas .NET 5.
  • Para usar C# 10 necesitas .NET 6.
  • Cada versión del lenguaje viene atada a una versión del framework.

¿Qué versión de .NET necesito para usar C# 10? Necesitas .NET 6. La regla general es que cada versión de C# desde 2017 viene atada a una versión específica de .NET, así que si quieres la sintaxis más nueva, actualiza el runtime.

¿Qué mejoras de sintaxis trajo C# entre la versión 6 y la 8?

Varias de las mejoras más usadas hoy nacieron en este rango. Son pequeñas, pero juntas cambian la legibilidad de un proyecto entero.

Inicializadores, interpolación y funciones flecha

El autoproperty initializer te permite asignar un valor por defecto a una propiedad de clase en la misma línea de su declaración [3:30]. Te ahorras una línea por cada propiedad que antes inicializabas en el constructor.

La string interpolation usa el símbolo $ y llaves para combinar texto con variables o llamadas a funciones. Es más limpio que concatenar con + y se siente natural si vienes de otros lenguajes.

Las expression-bodied functions funcionan parecido a las arrow functions de JavaScript. Cuando una función solo tiene una línea, como devolver la suma de x y y, escribes el operador flecha y listo, sin llaves ni estructura completa.

Operador null condicional y funciones locales

El operador null condicional llegó en C# 6 y es de las mejoras más útiles del lenguaje [4:50]. Te permite verificar si una propiedad es nula durante la evaluación, evitando el clásico if (variable != null). Reduce código y mejora la legibilidad.

Las local functions dejan crear funciones dentro de métodos. Cuando un método crece demasiado, partirlo en funciones internas estructura mejor la lógica sin contaminar la clase con métodos privados que solo se usan en un lugar.

Separador de dígitos, tuplas y switch reducido

El separador de dígitos usa el guion bajo (_) dentro de números largos para que sean fáciles de leer. Útil cuando, por necesidad, tienes valores grandes en el código.

Las tuplas de C# 7 permiten retornar varios valores de tipos distintos en un mismo método, sin crear una clase auxiliar. Por ejemplo, devolver un result y un calculation desde un método llamado CalculationTuple.

C# 8 trajo el switch expression, que reduce la sintaxis de un switch cuando solo necesitas mapear valores de entrada a valores de salida. Cada caso se representa con una línea y el return es directo.

¿Qué cambió con top level statements y global usings?

Las dos versiones más recientes apuntaron a un objetivo claro: que escribir un Hello World en C# deje de ser intimidante.

C# 9 introdujo top level statements [7:30]. Antes, para imprimir una línea necesitabas un namespace, una clase y un método Main. Ahora basta con using System; y Console.WriteLine("Hello World"); directo en el archivo.

C# 10 sumó global usings, que evitan repetir los using del core de .NET en cada archivo [8:20]. El compilador detecta automáticamente que estás usando la consola y no necesitas declararlo arriba.

¿Qué es un top level statement en C#? Es una característica de C# 9 que permite escribir código ejecutable sin envolverlo en un namespace, clase o método Main. Reduce el Hello World a una sola línea.

El resultado combinado: pasaste de un Hello World lleno de estructura genérica a una línea de código. Para quien empieza, la barrera de entrada al lenguaje bajó muchísimo.

Si quieres profundizar en por qué se tomaron estas decisiones de diseño, busca el artículo C# Evolution en Dev.to [2:40], que resume las fases del lenguaje y las razones detrás de cada mejora.

¿Cuál de estas mejoras vas a aplicar primero en tu código? Cuéntame en los comentarios qué versión de C# estás usando hoy.