The New Extensions EVERYTHING Feature of C# 13!

M.F.M Fazrin
3 min readMay 24, 2024

--

Let’s delve deeper into the new Extensions feature in C# 13 and explore how it can be a significant change for code readability and functionality. We’ll look at each aspect of Extensions in detail and illustrate them with real-world examples and coding samples.

Implicit vs. Explicit Extensions

Implicit extensions in C# 13 allow you to extend a class without requiring any special syntax when using them. This means that you can use the extended functionality just like you would use any other member of the class. On the other hand, explicit extensions enable you to create projections or subcategories of the original class. This can be useful when you want to add conditional methods or properties based on the extended type.

For example, consider a Product class that represents a product in an e-commerce application. You might want to add a method to calculate the sales tax for the product. With implicit extensions, you can add this method directly to the Product class:

public class Product
{
public decimal Price { get; set; }
}
public extension ProductExtensions extends Product
{
public decimal CalculateSalesTax(decimal taxRate)
{
return Price * taxRate;
}
}

With explicit extensions, you could create a TaxableProduct projection that only includes products that are subject to sales tax:

public extension TaxableProduct extends Product
{
public decimal CalculateSalesTax(decimal taxRate)
{
return Price * taxRate;
}
}

Instance Members

One of the major improvements in C# 13’s Extensions is the ability to include instance members (properties and methods) in addition to static methods. This allows for a more natural syntax when using the extended functionality.

For instance, in the Product class example above, the CalculateSalesTax method is an instance method. This means you can call it on an instance of the Product class, like so:

var product = new Product { Price = 100 };
var salesTax = product.CalculateSalesTax(0.05m);

This is a significant improvement over traditional static extension methods, which require you to pass the instance as a parameter to the method.

Improved Code Organization

By combining implicit and explicit extensions in a single class, you can organize the extension logic alongside the code that uses it. This enhances readability and maintainability by keeping related code together.

For example, you might have a ProductExtensions class that includes both implicit and explicit extensions for the Product class. This keeps all the extension logic for the Product class in one place, making it easier to understand and maintain.

Conclusion

The Extensions feature in C# 13 represents a significant addition to the language that promises to improve code readability, maintainability, and expressiveness. By allowing developers to add functionality to existing classes without modifying their original code, Extensions promote code reuse and reduce the need to modify original class definitions. While other features like discriminated unions might also be desirable, Extensions stand out as a game-changer for C# developers. As we’ve seen in the examples above, Extensions can make your code more intuitive, easier to understand, and more flexible. Whether you’re extending a simple class like Product or a more complex class in a large application, Extensions can help you write cleaner, more maintainable code.

Thanks to Nick Chapsas

The New Extensions EVERYTHING Feature of C# 13! — YouTube

--

--

M.F.M Fazrin

Senior Software Development Specialist @ Primary Health Care Corporation (Qatar)