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
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
- Konzept und Anwendungsfälle; inkrementelle Generatoren (Überblick)
- Entwicklererfahrung und Einschränkungen