.NET 9 core features are discussed here to know some of the important added new developer favorite features.

String Literals

Raw String Literals is one of C# 11 features it allows without adding escape sequences and can include multi-line strings.

C#
var jsonString = """
{
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}
""";

Required Member

The "required" keyword was added for mentioning class members as a required field. Object initialization requires class members to declare.

C#
public class Person
{
    public required string Name { get; init; }
    public required int Age { get; init; }
}

// class usage
var person = new Person { Name = "Alice", Age = 25 };// Valid
var person = new Person { Age = 25 }; // In Valid Compile error

File Scoped Types

improve encapsulation by defining types that are scoped to a single file.

C#
file class HelperClass
{
    public static string GetMessage() => "This is a helper.";
}

//Usage in the same file
Console.WriteLine(HelperClass.GetMessage());

Compatibility and Migration

Migrating application .Net 6/7/8 to .Net 9 update is allowed directly to better development features.

Hot Reload

.Net 9 allows application changes by adding code directly reflecting in output like Hot reload.

C#
// Before change
Console.WriteLine("Hi");

// After change
Console.WriteLine("Hi .Net 9 feature");

Cross-platform Development

.Net MAUI app development simple enhanced UI.

C#
public class MainPage : ContentPage
{
    public MainPage()
    {
        var label = new Label
        {
            Text = "Welcome to Cross platform .NET MAUI!",
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.Center
        };
        Content = new StackLayout
        {
            Children = { label }
        };
    }
}

Enhanced Minimal API

For lightweight web application development Minimal API feature is making simple endpoint.

C#
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Launch Web application..");
app.Run();

Improved Error Handling

Setting Security header features to prevent sensitive information in error messages from attackers. Example of how to set security headers in an ASP.NET Core application.

C#
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    Add security headers
    app.Use(async (context, next) =>
    {
        context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
        context.Response.Headers.Add("X-Frame-Options\", "DENY");
        context.Response.Headers.Add("Content-Security-Policy", "default-src 'self'");
        await next();
    });
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}