0Pricing
C# Academy · Aula

Conceito e casos de uso; geradores incrementais (visão geral)

Saiba o que os geradores fazem, conheça casos de uso típicos e a ideia de geradores incrementais, além de uma emulação compatível com C# 6 usando atributos e classes parciais.

Conceito e casos de uso; geradores incrementais (visão geral) é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 2. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 2 aulas no total.

O que é um gerador?

Objetivo: aprender o que são os geradores de código-fonte e por que são úteis.

  • Eles analisam seu código e geram novos arquivos C#
  • São ótimos para código repetitivo (mapeadores, notificações e DTOs)
  • Ideia incremental: reagir apenas às entradas alteradas
  • Aqui, simulamos isso com atributos e classes partial (C# 6)

Ideia de classe partial

As classes partial permitem dividir um tipo entre arquivos; os geradores normalmente emitem a parte partial adicional.

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

Os geradores examinam atributos para decidir o que emitir. Simulamos a descoberta por meio de reflexão (em tempo de compilação, na prática).

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

Demonstração de modelo de código

Um gerador emitiria código em um novo arquivo. Nós apenas imprimimos um modelo simples para visualizar a ideia.

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

Visão geral do processamento incremental

Os geradores incrementais dividem o trabalho em pequenas etapas.

  • Acompanham as entradas (sintaxe e arquivos adicionais)
  • Recalculam somente quando algo é alterado
  • Compilações mais rápidas e menos alocações
  • Dica de projeto: mantenha as etapas puras e determinísticas

Onde eles são mais úteis

Casos de uso:

  • Código repetitivo: INotifyPropertyChanged, mapeadores de DTO
  • Verificações em tempo de compilação: mapas de rotas e vinculação de configurações
  • Desempenho: evitar reflexão em caminhos críticos
  • Sincronização entre documentação e código: IDs e constantes

Evite usá-los para lógica complexa em tempo de execução; mantenha a geração pequena e previsível.

Função do gerador

Verificação rápida: o que os geradores de código-fonte do C# fazem em tempo de compilação?

Recapitulação

Recapitulação: os geradores inspecionam seu código e geram código-fonte. Pense em termos de atributos + classes parciais, mantenha as saídas pequenas e recalcule apenas o que foi alterado.

Perguntas Frequentes

A aula “Conceito e casos de uso; geradores incrementais (visão geral)” é grátis?

Sim — o texto completo de “Conceito e casos de uso; geradores incrementais (visão geral)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 2 aulas no total.

O que vou aprender em “Conceito e casos de uso; geradores incrementais (visão geral)”?

Saiba o que os geradores fazem, conheça casos de uso típicos e a ideia de geradores incrementais, além de uma emulação compatível com C# 6 usando atributos e classes parciais. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 2.

Quanto tempo leva a aula “Conceito e casos de uso; geradores incrementais (visão geral)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceito e casos de uso; geradores incrementais (visão geral)
  2. Experiência do desenvolvedor e limitações
← Voltar para C# Academy