Introducing C# 9: Covariant returns


In May 20th 2020, Microsoft introduced C# 9, among the features announced, there is one that has not yet been talked about much: covariant returns. Usually in C# when we inherit from a class, it is possible to override a method if it is declared abstract or virtual but it is not possible to change the return type of this method. C# 9 allows this, In addition to overriding a virtual or abstract method, in C# 9 you can now return a covariant type of the initial type declared in the parent class. For example, you can now return a type that is inherited from the parent class. In this article I will show you how it works with a very simple example and compare with earlier versions of C# 9. This post was produced with input from Dave Brock. Dave recently posted some really interesting C # 9 articles which you can find here:

Before C# 9

Here is a simple example of “covariant returns” before C# 9, you had to return the initial type like this:

Then after instanciation and calling the Order method, you had to cast the initial return type to its derived type like this:

As you can see there a cast to perform, and it can avoided with C# 9 🙂

With C# 9

Now let’s take the same example, but now you can explicitely return a covariant like this:

Its makes the consumption simpler:


It’s definitely not the most famous functionality of C# 9 but it could be pretty useful, your code is being a bit simpler :).

I would like to thanks Dave Brock for his participation as well, it was very fun to get his insights. I strongly encourage you to visit his awesome blog ( !

Written by


Anthony is a specialist in Web technologies (14 years of experience), in particular Microsoft .NET and learns the Cloud Azure platform. He has received twice the Microsoft MVP award and he is also certified Microsoft MCSD and Azure Fundamentals.
%d bloggers like this: