C# 13 ve .Net 9 İle Gelen Önemli Yenilikler

Selamlar,

Bu makalede, Kasım ayında çıkacak olan .Net 9 ve C# 13 ile hayatımıza girecek yeni özelliklerden bahsedeceğim.

1-) Semi-Auto Properties (Field Keywor’ü):

Önceki şu makalemde bu özelliği, altı ay önce değinmiştim. Bu konu çok önemli olduğundan dolayı, tekrardan detaylı bir şekilde farklı örnekler ile açıklık getirmek istedim. Bu örneği  şu sitede compile edebilirsiniz. Henüz .NET 9 Preview sürümünde çalıştırmayı başaramadım. ‘field‘ keyword’ü maalesef henüz tanımlanamıyor.

Aşağıdaki örnekte ExchnageType sınıfının Type ve Url propertyleri internal değişken tanımlanmadan, global “field” keyword’ü ile atama yapılabilmektedir. Bu da bize kod okunaklığında ve global kod yazımında büyük kolaylık sağlayacaktır. İlgili sınıfın kullanıldığı tüm yerlerde ayrıca bir değişken kullanmamak, kullanıldığı yerde var olan değişkenler ile karıştırılmasına, güvenliğin arttırılmasına ve hataların azaltılmasına yardımcı olacaktır. Aşağıdaki örnekte, bir ürünün belirtilen kura göre TL karşılığı bulunucaktır. Tek sorun var olan hali hazırdaki projelerde, implementasyon sırasında field keywordünün değişken olarak kullanılması durumunda karşımıza çıkabilir. Bu durumda field için=> “@field” şeklinde bir dönüşüme gitmek gerekebilir.

2-) Yeni Lock Sınıfı:

C# 13 ile karşımıza, özellikle asenkron programlamada kullandığımız yeni bir System.Threading.Lock sınıfı çıkmaktadır. Geçmişte, kilitleme amacıyla bir nesne türü kullanılıyordu, ancak artık çoğu kilitleme için gelecekteki standart haline gelmesi beklenen bu yeni sınıfı kullanılacaktır.

Eski Yöntem:

Yeni Yöntem: Artık nur topu gibi yeni bir Lock sınıfımız var. Ve bunun üzerinden gelen birçok yeni özellik, bizleri bekliyor.

Asenkron Lock: Asenkron methodlarda, lock işlemine ihtiyaç duyulursa standart “Lock” sınıfı halen bizim ihtiyaçlarımıza cevap verememektedir. Bunun için halen aşağıda görüldüğü gibi, SemaphoreSlim sınıfına ihtiyaç duymaktayız.

3-) params Collections

.Net 9’dan önce parametre sayısını bilmediğimiz metodlar için standart kullanım:

.Net 9 ile hayatımıza giren kullanım:

4-) Swagger yerine OpenApi Dökümanı:

Aşağıda görüldüğü gibi, .Net 5.0’den beri gelen Swagger dökümanı yerine artık Web API uygulamarında default olarak çok hoşuma gitmese de artık OpenApi geliyor. İlgili sayfayı => “/openapi/v1.json”  şeklinde görebilirsiniz.

OpenApi şu an için aşağıdaki kütüphane kullanıyor:

Peki istersek Swagger’ı OpenAPI yerine kullanabilir miyiz ? Tabii ki :) Scalar kütüphanesini kullanarak, aşağıdaki adımları sırası ile gerçekleştirerek .Net 9 projemize ekleyebilirsiniz:

  1. dotnet add package Scalar.AspNetCore –version 1.2.*
  2. using Scalar.AspNetCore;

5-)Task.WhenEach :

Farklı zamanlarda asenkron çalışan işlerin, bir listesine aldığımızı düşünelim. Her birinin tamamlanması anında, gecikmeden raporlanmasını isteyelim. .Net 9 öncesi “Task.WaitAll()” methodu ile, tüm görevlerin bitmesini beklediği için bu sorunumuza çözüm olamazdır. Tamamlandığında bir sonrakini raporlmak için “Task.WaitAny()” yöntemini, geçici bir çözüm olarak kullanabiliriz. Ama bu da sıralı bir akışa, yani senkronizasyona sebebiyet verir. C# 13 bu senaryoyu çözüm olarak çok daha şık ve etkili bir yaklaşım sunar: İşte karşınızda yeni Task methodu “Task.WhenEach()“. Aşağıdaki örneğe hep beraber göz atalım..

1-) Bu örnegimizde dört farklı URL’den Request çekeceğiz. Aşağıda Request sonrası, dönülecek herbir requestin result sınıfı tanımlanmıştır.

2-) Asenkron olarak her bir URL için yapılacak Fetch işlemine ait method aşağıdaki gibidir.

3-) Aşağıdaki örnekte dört farklı URL’e request çekilmiş ve “Task.WhenEach()” methodu ile herbir task yürütülüp, asenkron olarak tamamlanan taskların sonucu ekrana basılmıştır. Bence, özellikle yüksek trafikli işlemlerde bu yeni method çokça işimize yarıyacaktır.

Sonuç Ekranı:

6-) Yeni LINQ Methodları

CountBy:

Aşağıdaki gibi aynı markaya ait farklı motor markalarının olduğu bir liste olsun.

Şimdi gelin öncelikle eski usul yöntemler ile bunları gruplayıp, toplam sayısına göre sıralayıp, ekrana basalım:

Şimdi gelin aynı işlemi .Net 9 ile yapalım: Aşağıda görüldüğü gibi GroupBy yapmadan “CountBy” ile tüm iş çözülmüştür.

AggregateBy:

Aşağıdaki örnege baktığımızda aynı kategorideki ürünlerin fiyat toplamı standart yöntemler ile hesaplanmıştır.

Ayni sorunu .NET 9 ile gelen, aşağıdaki gibi AggregateBy() ile çok daha pratik bir şekilde çözelim:

Index

Aslında “Index” çok büyük bir özellik değil. Aşağıda görüldüğü gibi .Net sürümünün çoğunda, foreach yoluyla herhangi bir koleksiyonun indeksini kolaylıkla alabilirsiniz.

Şimdi gelin aynı Index listeyi bir de .Net 9.0 ile alalım:

Geldik bir makalenin daha sonun. Bu makalede, çok yakında .Net 9 ile hayatımıza girecek özelliklere bir göz attık. Makaleyi daha uzatmamak adına bahsetmediğim bir çok yeni özellik var. Onları da, sizden gelecek geri dönüşlere göre masaya yatırır ve tartışırız. Yeni bir makalede görüşmek üzere hepinize hoşçakalın.
Kaynaklar:

 

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. Nurullah dedi ki:

    çok güzel olmuş abi , elinize sağlık

  2. Kerim ŞAHİN dedi ki:

    Elinize yüreğinize sağlık, bilgi için teşekkür ederim. CountBy ve Foreach’teki index olayına bayıldım. Bu çok güzel olmuş. Selametle..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.