0Pricing
C# Academy · Lektion

Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)

Erfahren Sie, was Generatoren tun, welche Anwendungsfälle typisch sind und was inkrementelle Generatoren ausmacht. Lernen Sie außerdem eine C#-6-freundliche Emulation mit Attributen und partiellen Klassen kennen.

Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick) ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 2. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 2 Lektionen.

Was ist ein Generator?

Ziel: Erfahren, was Quellgeneratoren sind und warum sie hilfreich sind.

  • Sie analysieren Ihren Code und erzeugen neue C#-Dateien.
  • Ideal für Boilerplate-Code (Mapper, Benachrichtigungen, DTOs)
  • Die Idee der Inkrementalität: nur auf geänderte Eingaben reagieren
  • Hier simulieren wir das mithilfe von Attributen und partiellen Klassen (C# 6).

Idee partieller Klassen

Mit partial-Klassen lässt sich ein Typ auf mehrere Dateien aufteilen; Generatoren geben normalerweise den zusätzlichen partiellen Teil aus.

using System;

// Partial lets code live in multiple files; generators often emit a second part.
public partial class Person
{
  // "User" code (hand-written)
  public string FirstName;
  public string LastName;
}

// Imagine another file is generated with helpers.
public partial class Person
{
  // This region simulates "generated" members.
  public string FullName()
  {
    // simple boilerplate a generator could write
    return (FirstName ?? """") + " " + (LastName ?? """");
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = new Person();
    p.FirstName = "Ada";
    p.LastName = "Lovelace";
    Console.WriteLine(p.FullName());
  }
}

Attributmarkierungen

Generatoren durchsuchen Attribute, um zu entscheiden, welchen Code sie erzeugen. Wir simulieren die Erkennung per Reflection (im echten Einsatz zur Buildzeit).

using System;
using System.Reflection;

// Marker attribute a generator would search for
[AttributeUsage(AttributeTargets.Class)]
public sealed class AutoNotifyAttribute : Attribute { }

// A class we want to augment (emulating generator input)
[AutoNotify]
public class Settings
{
  public string Theme; // we wish to auto-generate a property wrapper
}

// In real generators, Roslyn would find [AutoNotify] and emit code.
// Here we only "discover" the attribute at runtime (emulation).

public class Program
{
  public static void Main(string[] args)
  {
    Type t = typeof(Settings);
    object[] at = t.GetCustomAttributes(typeof(AutoNotifyAttribute), false);
    Console.WriteLine(at.Length > 0 ? "Marker found" : "No marker");
  }
}

Demo einer Codevorlage

Ein Generator würde Code in eine neue Datei schreiben. Wir geben lediglich eine einfache Vorlage aus, um die Idee zu veranschaulichen.

using System;
using System.Text;

// Tiny template that prints C# code a generator could add.
public static class Template
{
  public static string EmitAutoProperty(string className, string fieldName)
  {
    // Very small example; real generators would use syntax trees.
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("public partial class " + className);
    sb.AppendLine("{");
    sb.AppendLine("  public string " + Upper(fieldName) + "");
    sb.AppendLine("  {");
    sb.AppendLine("    get { return this." + fieldName + "; }");
    sb.AppendLine("    set { this." + fieldName + " = value; /* notify here */ }");
    sb.AppendLine("  }");
    sb.AppendLine("}");
    return sb.ToString();
  }

  private static string Upper(string name)
  {
    if (string.IsNullOrEmpty(name)) return name;
    if (name.Length == 1) return name.ToUpperInvariant();
    return char.ToUpperInvariant(name[0]) + name.Substring(1);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    // Show what the "generated" code could look like
    string code = Template.EmitAutoProperty("Settings", "theme");
    Console.WriteLine(code);
  }
}

Überblick über inkrementelle Generatoren

Inkrementelle Generatoren teilen die Arbeit in kleine Schritte auf.

  • Eingaben verfolgen (Syntax, zusätzliche Dateien)
  • Nur neu berechnen, wenn sich etwas geändert hat
  • Schnellere Builds und weniger Allokationen
  • Designtipp: Schritte rein und deterministisch halten

Geeignete Einsatzbereiche

Anwendungsfälle:

  • Boilerplate-Code: INotifyPropertyChanged, DTO-Mapper
  • Prüfungen zur Kompilierzeit: Routenzuordnungen, Settings-Binding
  • Performance: Reflection in zeitkritischen Pfaden vermeiden
  • Synchronisierung von Dokumentation und Code: IDs, Konstanten

Vermeiden Sie Generatoren für komplexe Laufzeitlogik; halten Sie die Ausgabe klein und vorhersehbar.

Aufgabe eines Generators

Kurze Überprüfung: Was tun C#-Quellgeneratoren zur Buildzeit?

Zusammenfassung

Zusammenfassung: Generatoren untersuchen Ihren Code und erzeugen Quelltext. Denken Sie in den Kategorien Attribute + partielle Klassen, halten Sie die Ausgaben klein und berechnen Sie inkrementell nur neu, was sich geändert hat.

Häufig gestellte Fragen

Ist die Lektion „Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)“ kostenlos?

Ja — der vollständige Text von „Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 2 Lektionen.

Was lerne ich in „Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)“?

Erfahren Sie, was Generatoren tun, welche Anwendungsfälle typisch sind und was inkrementelle Generatoren ausmacht. Lernen Sie außerdem eine C#-6-freundliche Emulation mit Attributen und partiellen Kl… Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 2.

Wie lange dauert die Lektion „Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)
  2. Entwicklererfahrung und Einschränkungen
← Zurück zu C# Academy