Novedades de .NET 9: Lo Que Necesitas Saber

.NET 9 ha llegado con una serie de novedades y mejoras que impactan significativamente en el desarrollo de software. Desde optimizaciones en el rendimiento hasta nuevas características en C#, este lanzamiento ofrece herramientas y funcionalidades que facilitan la vida a los desarrolladores. A continuación, exploraremos algunas de las mejoras más destacadas y proporcionaremos ejemplos prácticos para ilustrar su uso.

1. Mejoras de Rendimiento

Una de las áreas clave de enfoque en .NET 9 es el rendimiento. Las optimizaciones en el compilador JIT (Just-In-Time) ahora permiten un uso más eficaz de la optimización guiada por perfiles dinámicos (PGO), mejorando especialmente las operaciones de casteo y tipo. Estas mejoras son fundamentales para aplicaciones que requieren alta eficiencia y bajo tiempo de respuesta.

Ejemplo de Código: Aunque no podemos ver directamente el código que hace uso de PGO, el siguiente fragmento muestra cómo se puede optimizar el acceso a datos en .NET 9, utilizando mejores prácticas para minimizar el uso de memoria y mejorar la velocidad de ejecución:

public class ProductService
{
    private readonly ProductDbContext _context;

    public ProductService(ProductDbContext context)
    {
        _context = context;
    }

    public async Task<List<Product>> GetProductsAsync()
    {
        // Uso eficiente de memoria con AsNoTracking
        return await _context.Products.AsNoTracking().ToListAsync();
    }
}

2. Contenedores y Despliegue

Con las optimizaciones para entornos de contenedores, .NET 9 mejora la velocidad de inicio y reduce el tamaño de las imágenes de contenedores. Esto es particularmente útil para aplicaciones que se ejecutan en entornos de orquestación como Kubernetes.

Ejemplo de Proyecto: Crear un contenedor Docker para una aplicación ASP.NET Core:

# Usar la imagen base de .NET 9
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY ["MyApp/MyApp.csproj", "MyApp/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

3. Nuevas Características en C#

.NET 9 introduce características como métodos de clase estáticos en interfaces, lo que permite definir comportamientos reutilizables en interfaces. Esta mejora facilita la programación orientada a interfaces y la reutilización de código.

Ejemplo de Código: Definiendo una interfaz con un método estático:

public interface ICalculadora
{
    static int Sumar(int a, int b) => a + b;
}

public class CalculadoraAvanzada : ICalculadora
{
    public int Restar(int a, int b) => a - b;
}

// Uso del método estático en la interfaz
int resultado = ICalculadora.Sumar(5, 10); // resultado = 15

4. Blazor Full Stack Web

Las mejoras en Blazor permiten crear aplicaciones híbridas que combinan la ejecución en el cliente y en el servidor, además de una integración más fluida con JavaScript. Esto resulta en aplicaciones más interactivas y con mejor rendimiento.

Ejemplo de Proyecto: Creando una aplicación Blazor WebAssembly que consume una API:

@page "/productos"
@inject HttpClient Http

<h3>Lista de Productos</h3>
<ul>
@foreach (var product in products)
{
    <li>@product.Name - @product.Price</li>
}
</ul>

@code {
    private List<Product> products;

    protected override async Task OnInitializedAsync()
    {
        products = await Http.GetFromJsonAsync<List<Product>>("https://api.misproductos.com/products");
    }
}

Serialización

En System.Text.Json, .NET 9 tiene nuevas opciones para serializar JSON y un nuevo singleton que facilita la serialización mediante valores predeterminados web.
Opciones de sangría
JsonSerializerOptions incluye nuevas propiedades que permiten personalizar el carácter y el tamaño de sangría de JSON escrito.
C#

var options = new JsonSerializerOptions
{
    WriteIndented = true,
    IndentCharacter = '\t',
    IndentSize = 2,
};

string json = JsonSerializer.Serialize(
    new { Value = 1 },
    options
    );
Console.WriteLine(json);
//{
//                "Value": 1
//}

Opciones web predeterminadas

Si desea serializar con las opciones predeterminadas que ASP.NET Core usa para las aplicaciones web, use el nuevo singleton JsonSerializerOptions.Web.

string webJson = JsonSerializer.Serialize(
    new { SomeValue = 42 },
    JsonSerializerOptions.Web // Defaults to camelCase naming policy.
    );
Console.WriteLine(webJson);
// {"someValue":42}

Conclusiones

.NET 9 trae consigo una serie de novedades que mejoran el rendimiento, optimizan el desarrollo de aplicaciones en contenedores y añaden nuevas características al lenguaje C#. Estas mejoras son fundamentales para ayudar a los desarrolladores a construir aplicaciones más eficientes y escalables.

Para más información sobre las novedades de .NET 9, puedes consultar la documentación oficial de Microsoft y otros recursos de la comunidad.

Si estás interesado en explorar más ejemplos de código y proyectos, asegúrate de revisar el blog de .NET donde se comparten actualizaciones y tutoriales regularmente.