C# Academy · Lektion

Koncept og anvendelsesområder; inkrementelle generators (oversigt)

Lær, hvad generators gør, typiske anvendelsesområder og idéen bag inkrementelle generators samt en C# 6-venlig emulering med attributter og partial-klasser.

Lektion 1 af 28 trin

Koncept og anvendelsesområder; inkrementelle generators (oversigt) er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 1 af 2. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 2 lektioner i alt.

Hvad er en generator?

Mål: Lær, hvad kildegeneratorer er, og hvorfor de er nyttige.

  • De analyserer din kode og genererer nye C#-filer
  • Velegnet til skabelonkode (mappere, notifikationer, DTO'er)
  • Inkrementel idé: Reagér kun på ændrede input
  • Her efterligner vi det med attributter og partial-klasser (C# 6)

Idéen bag partial-klasser

partial-klasser gør det muligt at opdele en type på tværs af filer; generatorer genererer normalt den ekstra del af klassen.

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());
  }
}

Attributmarkører

Generatorer scanner attributter for at afgøre, hvad de skal generere. Vi efterligner registreringen ved hjælp af refleksion (i praksis under bygningen).

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");
  }
}

Demonstration af kodeskabelon

En generator ville generere kode i en ny fil. Vi udskriver blot en enkel skabelon for at synliggøre idéen.

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);
  }
}

Oversigt over inkrementel behandling

Inkrementelle generatorer opdeler arbejdet i små trin.

  • Følg input (syntaks, yderligere filer)
  • Genberegn kun, når noget er ændret
  • Hurtigere byggeprocesser og færre allokeringer
  • Tip til udformning: Hold trinene rene og deterministiske

Hvor de er særligt nyttige

Anvendelser:

  • Skabelonkode: INotifyPropertyChanged, DTO-mappere
  • Kontroller under kompilering: rutekort, binding af indstillinger
  • Ydeevne: Undgå refleksion i ydeevnekritiske kodeveje
  • Synkronisering af dokumentation og kode: id'er, konstanter

Undgå dem til kompleks logik under kørsel; hold genereringen lille og forudsigelig.

Generatorens rolle

Hurtigt tjek: Hvad gør C#-kildegeneratorer under kompileringen?

Opsummering

Opsummering: Generatorer undersøger din kode og genererer kildekode. Tænk i attributter + partial-klasser, hold resultaterne små, og genberegn kun det, der er ændret.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Koncept og anvendelsesområder; inkrementelle generators (oversigt)” gratis?

Ja — hele teksten til “Koncept og anvendelsesområder; inkrementelle generators (oversigt)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 2 lektioner i alt.

Hvad lærer jeg i “Koncept og anvendelsesområder; inkrementelle generators (oversigt)”?

Lær, hvad generators gør, typiske anvendelsesområder og idéen bag inkrementelle generators samt en C# 6-venlig emulering med attributter og partial-klasser. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 2.

Hvor lang tid tager lektionen “Koncept og anvendelsesområder; inkrementelle generators (oversigt)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Koncept og anvendelsesområder; inkrementelle generators (oversigt)
  2. Udvikleroplevelse og begrænsninger
← Tilbage til C# Academy