CodeBlanks Logo Icon CodeBlanks

Source generator nedir?

C# kursu · Uzman · Ders 37/47

Source generator'ın ne olduğunu ve derleme zamanı kod üretimini öğrenirsin.

Source generator nedir?

Bir source generator, derleme sırasında çalışan ve derlemeye yeni C# kodu ekleyen bir Roslyn bileşenidir. Çalışma zamanında reflection yapmak yerine, gerekli kodu derleme zamanında üretir; böylece başlangıç süresi kısalır.

Üretilen kod, öğrencinin yazdığı kodun yanına ek kaynak dosyaları olarak eklenir. Generator'lar özellikle serileştirme, bağımlılık enjeksiyonu kaydı ve DTO üretiminde yaygın kullanılır.

Roslyn ve derleme zamanı

Source generator'lar, Roslyn derleyici platformunun bir parçasıdır. Derleyici sözdizim ağacını (syntax tree) ve anlamsal modeli (semantic model) generator'a sunar; generator da bunları inceleyip yeni kod üretir.

Bu, çalışma zamanı maliyetini derleme zamanına taşır. Örneğin, bir özniteliği (attribute) işaretleyen tüm sınıfları bulup her biri için yardımcı metotlar üretebilirsin.

Uygulama Bir sınıf tanımı üret

GeneratorDemo adında statik bir sınıf içinde public static string GenerateClass(string typeName) metodu yaz. Gövdede return $"public class {typeName} {{ }}"; döndür. Main içinde Console.WriteLine(GeneratorDemo.GenerateClass("UserDto")) çağır.

Örnek çözümü göster
GeneratorDemo içine GenerateClass metodunu ekle. Main içine Console.WriteLine(GeneratorDemo.GenerateClass("UserDto")); yaz.
Örnek çözüm:
using System;

static class GeneratorDemo
{
    public static string GenerateClass(string typeName)
    {
        return $"public class {typeName} {{ }}";
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(GeneratorDemo.GenerateClass("UserDto"));
    }
}

Kendini test et

  1. Source generator ne zaman çalışır?

    • Çalışma zamanında (runtime)
    • Derleme zamanında (compile time)
    • Uygulama kapanırken
    • İstek geldiğinde
    Cevabı göster

    Derleme zamanında (compile time) — Doğru. Source generator derleme sırasında çalışır.

  2. Source generator kavramlarını eşleştir

    Compile time
    Kod üretim zamanı
    Roslyn
    Derleyici platformu
    Syntax tree
    Sözdizim ağacı
  3. GenerateClass metodunu tamamla

    public static string ____(string typeName) { return $"public class {typeName} {{ }}"; }
    Cevabı göster
    public static string GenerateClass(string typeName) { return $"public class {typeName} {{ }}"; }

Uzman bölümündeki tüm dersler