CodeBlanks Logo Icon CodeBlanks

Syntax receiver

C# kursu · Uzman · Ders 40/47

SyntaxReceiver ile derleme sırasında AST taramayı öğrenirsin.

Syntax receiver

Bir syntax receiver, derleme sırasında sözdizim ağacını (syntax tree) tarayan ve ilginç düğümleri toplayan bir nesnedir. Generator, her sözdizim ağacı için receiver'ı çağırır; receiver, örneğin belirli bir özniteliği taşıyan sınıf bildirimlerini biriktirir.

Bu, derleme zamanı reflection'a benzer: kodu çalıştırmadan, yapısını incelersin. Toplanan düğümler daha sonra kod üretimi için kullanılır.

Toplama ve sayma

Bir receiver genellikle bir List<string> tutar ve her uygun düğümde bir öğe ekler. Derleme sonunda bu liste, generator'a iletilir ve her öğe için kod üretilir.

Bu derste receiver'ı bir ClassCollector sınıfıyla simüle ediyoruz: OnClass metodu bir ad ekler, Count özelliği toplamı verir.

Uygulama ClassCollector ile topla

ClassCollector sınıfı tanımla. public List<string> Classes { get; } = new(); özelliği, public void OnClass(string name) metodu (içinde Classes.Add(name);) ve public int Count => Classes.Count; özelliği olsun. Main'de üç sınıf adı ekle ve Console.WriteLine(collector.Count) yazdır.

Örnek çözümü göster
class ClassCollector { public List<string> Classes { get; } = new(); public void OnClass(string name) { Classes.Add(name); } public int Count => Classes.Count; }. Main'de collector.OnClass üç kez, Console.WriteLine(collector.Count);
Örnek çözüm:
using System;
using System.Collections.Generic;

class ClassCollector
{
    public List<string> Classes { get; } = new();
    public void OnClass(string name) => Classes.Add(name);
    public int Count => Classes.Count;
}

class Program
{
    static void Main()
    {
        var collector = new ClassCollector();
        collector.OnClass("UserDto");
        collector.OnClass("OrderDto");
        collector.OnClass("AccountDto");
        Console.WriteLine(collector.Count);
    }
}

Kendini test et

  1. OnClass çağrısını tamamla

    collector.____;
    Cevabı göster
    collector.OnClass("UserDto");
  2. Syntax receiver kavramlarını eşleştir

    Syntax tree
    Sözdizim ağacı
    OnClass
    Sınıf düğümü olayı
    Classes list
    Toplanan sınıf adları
  3. Syntax receiver ne toplar?

    • Çalışma zamanı hataları
    • Kullanıcı girdisi
    • Sözdizim ağacı düğümleri
    • Ağ paketleri
    Cevabı göster

    Sözdizim ağacı düğümleri — Doğru. Receiver sözdizim ağacı düğümlerini toplar.

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