Mert Şen FINDICAK
CITS Tech
Published in
3 min readNov 27, 2020

--

Merhabalar,

Bu yazımda C#9.0 ile gelen önemli yenilikleri, örnekler yaparak sizlere aktarmaya çalışacağım. Gelen özellikler nelerdir, nerelerde işimize yarar bunlara değineceğiz. Bu büyük değişikler getiren güncellemeyi incelemeye hemen başlayalım.

Ön Bilgi

C#9.0 güncellemesi 2020'nin kasım ayında .Net 5.0 ve Visual Studio 16.8.0 güncellemesi ile beraber geldi. Microsoft bu yeni .Net Core güncellemesinde ismindeki Core ifadesini kaldırmış ve diğer bütün platformları .Net çatısı altında birleştirmeyi amaçlamış.

Siz de bilgisayarınıza .Net 5.0 kurup benimle beraber örnek kodları deneyebilirsiniz.

Yenilikler

1. Records

Genel olarak kayıtların özellikleri bizlere kolaylıkla değişmez(immutable) nesneler oluşturmamıza olanak sağlıyor ve değer tabanlı karşılaştırma(Value-Based Equality) yapabiliyor.

1.1. Positional Record

Kayıtlar bizi uzun constructor, deconstructor ve property tanımlamaktan kurtarıyor ve tek satırda kayıt oluşturmamıza olanak sağlıyor. Bu özelliğin kod yazarken işimizi çok kolaylaştıracağına inanıyorum.

Böyle tanımlamak yerine sadece tek satırda kayıt tanımlayabiliriz. Üstteki ve alttaki kod tamamen aynı işlevleri yerine getiriyor.

1.2. Value-Based Equality

Sınıflardaki eşitlik kontrol ettiğimizde onların referans eşitliğine yani sağ ve sol tarafların aynı obje olup olmadığına bakıyor. Kayıtlarda ise değer tabanlı değişiklik kullanıyor bu sayede her bir değişkenin aldığı değerler tek tek kontrol edilip eşit olup olmadığına bakıyor.

1.3. Record Inheritance

Kayıtlarda da sınıflarda olduğu gibi kalıtım yapabiliyoruz ama bir kayıt sınıflardan miras alamıyor yalnızca kayıtlardan miras alabilir.

1.4. Immutable

Kayıtlar C#8.0 ‘da ki gibi değişmez nesneler, değişkenler oluştururken yazılan kodlardan bizi kurtarıyor ve tek satır kod yazarak varsayılan olarak yalnızca nesne oluştururken(initialize) değer atabileceğimiz halde geliyor.

2. Init-only Properties

Değişkenlerin yalnızca nesneyi yaratırken tanımlamamıza olanak sağlıyor, sonradan ise değişkeni değiştiremiyoruz. Readonly değişkenler tanımlamamıza büyük bir kolaylık sağlıyor. Bir değişkende “set” ve “init” aynı anda kullanılmıyor.

3. With-Expressions

Immutable nesneleri değiştiremeyeceğimiz için with ile var olan nesneden yararlanarak yeni oluşturulacak olan nesnede istediğimiz yerlerini değiştirebiliyoruz.

4. Top-level Programs

C#9 öncesinde uygulama yazarken, kodların mutlaka bir sınıf ve metot içerisinde yer alması gerekmekteydi. Yeni gelen güncellemeyle beraber basit kodlar yazarken main, class ve namespace belirtmemize gerek kalmıyor. Sanki bir main metodu içindeymiş gibi kodlarımızı yazabiliyoruz.

C#8.0 ve öncesi

C#9.0

5. Target-typed New

Bu özellik ile artık nesne oluştururken yeni ifadede tipini belirtmemize gerek kalmıyor ve örnekte görüldüğü gibi yalnızca new ifadesini kullanarak nesnemizi oluşturmuş oluyoruz. Nesnelerin dizilerini oluştururken bu özellik işimizi oldukça kolaylaştıracak.

6. Covariant Returns

Override edilen metodun dönüş tipini daha spesifik bir dönüş tipiyle değiştirebiliyoruz. Bu özellik Java‘da uzun zamandır vardı ve yeni gelen güncelleme ile bu özelliği C#’da da görmüş olacağız.

7. Improved Pattern Matching

C#8.0 ile birlikte “is” operatörü gelmişti ve değişkenin türünü kontrol etmemize olanak sağlıyordu. C#9.0 ile beraber ise “and, or ve not” operatörleri geldi.

Gelen not, or, and operatörleri diğer operatörler ile birleşebiliyor:

Gelişmiş operatörler ile switch kullanımı:

8. Target-Typed Conditional Expression

C#9.0 koşullu ifadelerde hedef tipe çevirmemize gerek kalmıyor ve compiler bu işlemi arka planda otomatik olarak yapıyor.

Sonuç

Bu yazımızda C#9.0 ‘ın önemli özelliklerine göz attık. Bu güncelleme getirdiği yenilikler bakımından önceki C# güncellemelerine göre büyük değişiklikler getirmiş gözüküyor. Positional record ve target-typed new, bizlere kod yazımında daha az kodla daha fazla iş yapmamıza olanak sağlıyor.

Gelen yenilikler burada anlatılanlarla sınırlı değil ayrıca gelen tüm yeniliklere göz atmak isterseniz kaynaklar kısmında belirtilen linklerden daha fazlasına ulaşabilirsiniz.

“Daha iyi olmaya çalışmayan, iyi olarak da kalamaz.” -Oliver Cromwell

Github Linki

--

--