C#

C# 12 Yeni Özellikleri: Primary Constructors ve Collection Expressions

· 8 dakika okuma · 0
C# 12 Yeni Özellikleri: Primary Constructors ve Collection Expressions

Merhaba,

.NET 8 yazısında C# 12'den kısaca bahsetmiştim. Bu yazımda ise C# 12 özelliklerini biraz daha derinlemesine ele almak istedim. Özellikle Primary Constructors ve Collection Expressions kurumsal projelerde gerçekten iş gören özellikler.

Primary Constructors

Bu özellik boilerplate kodu ciddi oranda azaltıyor. Önceden bir sınıfa dependency injection yapmak için şöyle yazıyorduk:

public class SiparisService
{
    private readonly IRepository _repo;
    private readonly ILogger _logger;

    public SiparisService(IRepository repo, ILogger logger)
    {
        _repo = repo;
        _logger = logger;
    }
}

C# 12 ile bu kadar:

public class SiparisService(IRepository repo, ILogger logger)
{
    // repo ve logger doğrudan kullanılabilir
}

Parametre listesi sınıf imzasına taşındı. Ayrı constructor, ayrı field tanımı yok. Özellikle birçok bağımlılığı olan servislerde kod çok daha okunaklı hale geliyor.

Collection Expressions

Dizi, liste, span — bunları oluşturmak için her veri tipi için farklı sözdizimi kullanıyorduk. C# 12 bunu birleştirdi:

// Eskiden
int[] dizi = new int[] { 1, 2, 3 };
List liste = new List { 1, 2, 3 };

// C# 12 ile
int[] dizi = [1, 2, 3];
List liste = [1, 2, 3];
Span span = [1, 2, 3];

Ayrıca spread operatörü ile koleksiyonları birleştirmek çok kolaylaştı:

int[] ilk = [1, 2, 3];
int[] ikinci = [4, 5, 6];
int[] birlesik = [..ilk, ..ikinci]; // [1, 2, 3, 4, 5, 6]

Alias Any Type

Using alias direktifi artık sadece namespace'lere değil, herhangi bir tipe uygulanabiliyor:

using KullaniciId = int;
using SiparisListesi = List;

KullaniciId id = 42;
SiparisListesi siparisler = new();

Domain-driven tasarımda value object'ler için çok kullanışlı. Primitive obsession sorununu minimize etmenin temiz bir yolu.

Inline Arrays

Bu özellik daha çok framework ve kütüphane geliştiricilerini ilgilendiriyor ama performans kritik kodlarda altın değerinde:

[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
{
    private int _element0;
}

Buffer buf = default;
buf[0] = 42; // Stack'te tahsis edilen, GC yükü yok

Heap allocation olmadan sabit boyutlu dizi — bellek yoğun işlemlerde belirgin performans kazanımı sağlıyor.

Genel Değerlendirme

C# 12 köklü değişiklikler getirmiyor ama biriktirilen iyileştirmeler ciddi. Özellikle Primary Constructors ve Collection Expressions günlük kodlamada hemen fark yaratacak özellikler. Projenizi .NET 8'e taşıdıktan sonra bu özellikleri aktif olarak kullanmanızı öneririm.

İyi Günler Dilerim,

Bu yazıyı paylaş: