C# 11 ile Gelen Yenilikler

Microsoft’un yayınladığı blog yazısına istinaden C# 11 ile gelebilecek özelliklere göz attık.

Öncelikle .NET 7 henüz long term support olmadığı için, C# 11’i kullanmak adına bazı ayarlar yapmanız gerekiyor. Bunun için visual studio 2022 17.1 versiyonunu indirmeli (community, professional veya enterprise edition fark etmez) ve .NET SDK’sının 6.0.200 versiyonunu kurmanız gerekiyor. Son olarak ta, .NET 6 ile oluşturduğunuz projenizin csproj dosyasında LangVersion tag’ını preview olarak eklemeniz gerekiyor.

✅ String interpolation’daki yenı satır kısıtı

Bildiğiniz gibi verbatim string literal‘ler içerisinde yeni satırda kullanım sağlayabiliyorduk fakat non-verbatim string literaller içerisinde bunun için \r\n kullanmamız gerekiyordu. C# 11 ile birlikte, non-verbatim interpolated string’ler için de yeni satır kısıtını kaldırmışlar.

var v = $"sayı\t: { 5.tostring()
.ToString(
Cultureınfo.InvariantCulture)}";

✅ List patterns (opsiyonel slice patterns)

Liste ve dizilerde pattern matching desteği geliyor. List pattern’lar köşeli parantezlerle belirtilirken, slice pattern’lar ise iki nokta (..) ile belirtiliyor ve isterseniz var pattern’ı da kullanabiliyorsunuz. İlerleyen zamanlarda IEnumerable tipler için de list pattern desteği getirmeyi planlıyorlarmış.

✅ Parameter null-checking (!! operatörü)

Ve geldik .NET dramasına dönen o yeniliğe. Hem Twitter hem de Github’ta çok fazla tartışıldı bu operatör. Ek olarak  @Sedat Kapanoglu  da bu yeniliği neden beğenmediğini yine aynı thread içerisinde paylaştı.

https://github.com/dotnet/csharplang/discussions/5735#discussioncomment-2153360

Özetle, C#’ta bir argümanın null kontrolü klasik olarak aşağıdaki şekildeydi;

void M1(string s)
{
   if (s is null)
   {
      throw new ArgumentNullException(nameof(s));
   }
}

.NET 6 ile ThrowiIfNull statik metodu geldi.

void M2(string s)
{
   ArgumentNullException.ThrowIfNull(nameof(s));
}

ve C# 11 ile birlikte !! (bang bang) operatörü hayatımıza girecek aynı işlevi gören.

void M3(string s!!)
{
}

Bu arada bu özellik nullable reference types ile birlikte çalışabiliyor. NRT compile time’da, parameter null-checking runtime’da kontrol şeklinde düşünebilirsiniz.

Lambda parametreleri desteği var. Indexer parametreleri için kullanılabilir. Get ve set içerisinde kontrol edilir. Constructor’lar için “field initialization”‘dan önce kontrol ediliyor. async metodlarda da kullanım mevcut.

Kaynak:

https://devblogs.microsoft.com/dotnet/early-peek-at-csharp-11-features/

https://github.com/dotnet/csharplang/discussions/5735

https://sharplab.io/#v2:EYLgtghglgdgPgAQEwEYCwAoBBmABM3AYVwG9NcL8AWXAWRQAoEUAGXAZwEpzKyNKBuKADNcDdkIkwArgBtZ3foIp9lygC4ALAE4B7AO64YAU0MBBbQHNpYYzHUA5ObICiADwDGxgA7qoumAYYCFtdYXFOTgBuHmUAX1jcBIxEgHpU3AA6BxcAFVwANkxEhBpaJCZWDkUBVTULa1t7J3l3L19/GEzcnQMASWEW2SCQ4zCI6MTkkrLsSrZ2AEJFmt4pzDigA=

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.