In this post, let's have a look at a nice feature that is coming with C# 14.0.
Currently it's still on preview, so you can try this feature out with .NET 9.0 (C# 14.0 is supported on .NET 10 though) or .NET 10 .0 with LangVersion set to preview.
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<LangVersion>preview</LangVersion> ...
</PropertyGroup>
or
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>preview</LangVersion>
...
</PropertyGroup>
Now let's have a look.
Consider the following class.
public class Employee
{
// Other properties
public required DateOnly Birthday { get; set; }
}
Say you have a requirement, where Employees Age needs to be >= 21. We can introduce that validation when setting a value for the Birthday, but in order to do that, and just for that, we need to add a backing field for Birthday, something like below:
public class Employee
{
private const int MinAge = 21;
// Other properties
private DateOnly _birthday;
public required DateOnly Birthday
{
get => _birthday;
set
{
ArgumentOutOfRangeException.ThrowIfLessThan(value, DateOnly.FromDateTime(DateTime.Now.AddYears(-MinAge)));
_birthday = value;
}
}
}
But what if we can do the same without using the backing field? C# 14.0 introduces a new contextual keyword field.
public class Employee
{
private const int MinAge = 21;
// Other properties
public required DateOnly Birthday
{
get;
set
{
ArgumentOutOfRangeException.ThrowIfLessThan(value, DateOnly.FromDateTime(DateTime.Now.AddYears(-MinAge)));
field = value;
}
}
}
So here just as a value contextual keyword, we now have a field contextual keyword. We no longer need the backing field, therefore we also don't need to provide a body for the get accessor.
I am loving it.
Keep watching this space for more C# 14.0 features:
What's new in C# 14
Happy Coding.
No comments:
Post a Comment