Less boilerplate code with the new primary constructor in C# 12

9/24/2023
2 minute read

The new language feature "primary constructor" which will be released with C# 12 / .NET 8 this year (November 2023) allows you to remove some ceremonial code. Let's see how. If you need a refresher on the primary constructors just click check out my blog post.

Dependency Injection setup

Prior to .NET 8 if we have a class that lives inside the Dependency Injection looks roughly like this:

public class MyService
{
  private readonly IDepedent dependent;
  
  public MyService(IDependent dependent)
  {
    this.dependent = dependent;
  }
  
  public void Do() 
  {
    dependent.DoWork();
  }
}

Thre more services you have, the more "setup" code you need. Here this new feature can help, and remove the whole private readonly part as well as all the initialization:

public class MyService(IDependent dependent)
{
  public void Do() 
  {
    dependent.DoWork();
  }
}

These two classes are completely the same. The compiler takes care of all the boilerplate code for you and creates the fields and assignments. You can have a look on sharplab.io to see that behind the scenes, roughly the same code is generated.

The downside to this approach is more that we have yet another way of doing a thing. That might be especially overwhelming for new joiners to the language that discover both approaches in one code base. A more extreme version of that is how you can check for null references - there are at least 4 ways to do so.

nameof get's a bit better in C# 12

The nameof operator is a great way to get the name of a variable, type, or member. With C# 12 it's getting even better. Let's see how.

C# 12: Collection literals

A new feature is hitting C# 12 and it is called Collection literals. In this blog post, I will show you what it is and how it works.

C# 12: Primary Constructors

Another new C# 12 feature might drop soon and makes its debut with the next iteration: Primary Constructors.

The blog post will talk about what a Primary constructor is, why we already have it, and what the proposal tries to change. Exciting times are ahead of us!

An error has occurred. This application may no longer respond until reloaded. Reload x