New features in C# 8

mteheran

Miguel Teheran

Posted on June 17, 2018

New features in C# 8

After an amazing version 7.x in 2017, a new C# is being built and it is going to include new useful features.

However, if you donโ€™t know the new features in C# 7.x, you must read the following posts; you canโ€™t imagine how you can improve your code using this new features:

https://mteheran.wordpress.com/2017/12/01/features-c-7-0-7-1-7-2/
https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/

A specific roadmap for C# is not published, but now we can check the new features coming in the official repository: https://github.com/dotnet/csharplang/issues

Nullable reference types:

A great feature was introduced in C# 6. The Null-conditional operator helps to check if an object or variable is null before accessing an internal value. For example:

int? length = mynumbers?.Length;
Enter fullscreen mode Exit fullscreen mode

Unfortunately, we cannot use this feature for String Type. In this case, the feature consists in allowing the developers to declare a String type as Nullable:

String? strVar = null;
var length = strVar?.Length;
Enter fullscreen mode Exit fullscreen mode

Async Streams:

Basically, async streams are the asynchronous equivalent of IEnumerable. This feature allows the developers to use the async keyword within a foreach as the following syntax:

foreach await (string s in asyncStream)
In order to use that code, you have to define the collection as IAsyncEnumerable:

async IAsyncEnumerable MethodName()
Default Interface Implementations:

Letโ€™s start checking the following code:


Interface ICal 
{
    Void TurnOn();
}
Calculator : ICal
{
   void TurnOn()
   {
   }
}

Enter fullscreen mode Exit fullscreen mode

Everything is easier using interfaces and as we know, we can use multiple implementations. But if we want to add a new method within the interface, all the classes implementing that interface need to create a local method with the same name and return the same value.

Now in C# 8, we can implement a method directly within the interface like this:

Interface ICar 
{
    Void TurnOn();
}
Car : ICar
{
   void TurnOn()
   {
   }
}
Interface ICal 
{
    Void TurnOn();
    double SumNumbers( double number1, double number2 ) 
    {
       return number1+ number2 
    }
}
Calculator : ICal
{
   void TurnOn()
   {
   }
}

Enter fullscreen mode Exit fullscreen mode

Extension Everything:

This proposal was reported as an issue in github and you can see the summary in the following link:

https://github.com/dotnet/roslyn/issues/11159

For example, an extension of a class person:


extension MyPersonExtension extends Person 
{ 
   public int NumberOfFingers() 
   { 
      get { โ€ฆ } 
   } 
}

Enter fullscreen mode Exit fullscreen mode

You can find more information in the following links:

https://www.infoq.com/news/2017/08/CSharp-8

https://channel9.msdn.com/Blogs/Seth-Juarez/A-Preview-of-C-8-with-Mads-Torgersen#time=32m11s

๐Ÿ’– ๐Ÿ’ช ๐Ÿ™… ๐Ÿšฉ
mteheran
Miguel Teheran

Posted on June 17, 2018

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

ยฉ TheLazy.dev

About