0Pricing
C# Academy · Lección

Concepto y casos de uso; generadores incrementales (visión general)

Descubra qué hacen los generadores, sus casos de uso habituales y la idea de los generadores incrementales, además de una emulación compatible con C# 6 mediante atributos y clases parciales.

Concepto y casos de uso; generadores incrementales (visión general) es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 2. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 2 lecciones en total.

¿Qué es un generador?

Objetivo: Aprenda qué son los generadores de código fuente y por qué resultan útiles.

  • Analizan su código y generan nuevos archivos de C#
  • Resultan ideales para el código repetitivo (mapeadores, notificaciones y DTOs)
  • Idea incremental: reaccionar solo ante entradas modificadas
  • Aquí lo simulamos con atributos y clases partial (C# 6)

Idea de las clases parciales

Las clases partial permiten dividir un tipo entre varios archivos; los generadores suelen emitir la parte adicional de la clase parcial.

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

Marcadores de atributos

Los generadores examinan los atributos para decidir qué emitir. Simulamos el descubrimiento mediante reflexión (en la práctica, durante la compilación).

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

Demostración de una plantilla de código

Un generador generaría código en un archivo nuevo. Aquí solo imprimimos una plantilla sencilla para visualizar la idea.

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

Resumen de los generadores incrementales

Los generadores incrementales dividen el trabajo en pasos pequeños.

  • Realice un seguimiento de las entradas (sintaxis y archivos adicionales)
  • Solo vuelva a calcular cuando algo haya cambiado
  • Compilaciones más rápidas y menos asignaciones
  • Consejo de diseño: mantenga los pasos puros y deterministas

Dónde resultan especialmente útiles

Casos de uso:

  • Código repetitivo: INotifyPropertyChanged, mapeadores de DTO
  • Comprobaciones en tiempo de compilación: mapas de rutas y enlace de configuración
  • Rendimiento: evitar la reflexión en rutas críticas
  • Sincronización de documentación y código: identificadores y constantes

Evítelos para lógica compleja en tiempo de ejecución; mantenga la generación pequeña y predecible.

Función del generador

Comprobación rápida: ¿Qué hacen los generadores de código fuente de C# durante la compilación?

Resumen

Resumen: Los generadores inspeccionan su código y generan código fuente. Piense en términos de atributos y clases parciales, mantenga los resultados pequeños y vuelva a calcular de forma incremental solo lo que haya cambiado.

Preguntas frecuentes

¿La lección «Concepto y casos de uso; generadores incrementales (visión general)» es gratis?

Sí — el texto completo de «Concepto y casos de uso; generadores incrementales (visión general)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 2 lecciones en total.

¿Qué aprenderé en «Concepto y casos de uso; generadores incrementales (visión general)»?

Descubra qué hacen los generadores, sus casos de uso habituales y la idea de los generadores incrementales, además de una emulación compatible con C# 6 mediante atributos y clases parciales. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 2.

¿Cuánto tiempo toma la lección «Concepto y casos de uso; generadores incrementales (visión general)»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Concepto y casos de uso; generadores incrementales (visión general)
  2. Experiencia del desarrollador y limitaciones
← Volver a C# Academy