0Pricing
C# Academy · Aula

Informações no nível do código-fonte (atributos Caller)

Use CallerMemberName, CallerFilePath e CallerLineNumber para capturar informações do local da chamada em registros, verificações de proteção e notificações de propriedades.

Informações no nível do código-fonte (atributos Caller) é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 3. 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 3 aulas no total.

Por que usar informações do chamador

Objetivo: capturar automaticamente informações do local da chamada.

  • CallerMemberName — quem fez a chamada
  • CallerFilePath — qual arquivo
  • CallerLineNumber — qual linha
  • Ótimo para registros, guardas e notificações

Nome do membro para registros

CallerMemberName preenche automaticamente o nome do método ou da propriedade do chamador quando o argumento é omitido.

using System;
using System.Runtime.CompilerServices;

public static class Log
{
  // Caller fills "member" automatically if not provided
  public static void Info(string msg, [CallerMemberName] string member = null)
  {
    Console.WriteLine("[" + (member ?? "?") + "] " + msg);
  }
}

public class Program
{
  static void DoWork() { Log.Info("started"); }

  public static void Main(string[] args)
  {
    Log.Info("app boot");
    DoWork(); // prints caller method name
  }
}

Informações de arquivo e linha

Adicione CallerFilePath e CallerLineNumber para obter diagnósticos precisos.

using System;
using System.Runtime.CompilerServices;

public static class Diag
{
  public static void Trace(string msg,
    [CallerFilePath] string file = null,
    [CallerLineNumber] int line = 0,
    [CallerMemberName] string member = null)
  {
    Console.WriteLine(file + ":" + line + " in " + member + " -> " + msg);
  }
}

public class Program
{
  static void Step() { Diag.Trace("stepping"); }

  public static void Main(string[] args)
  {
    Diag.Trace("start");
    Step();
  }
}

Notificações de propriedades

Use CallerMemberName em acessores de definição ou auxiliares de eventos para evitar strings codificadas manualmente.

using System;
using System.Runtime.CompilerServices;

public class Person
{
  private string _name;

  // Notify helper uses CallerMemberName so callers need not pass the property name
  void Notify([CallerMemberName] string property = null)
  {
    Console.WriteLine("Changed: " + property);
  }

  public string Name
  {
    get { return _name; }
    set { _name = value; Notify(); } // property name auto-filled
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = new Person();
    p.Name = "Ada"; // prints "Changed: Name"
  }
}

Guardas com nome do chamador

As informações do chamador tornam as mensagens de guarda mais claras, sem strings manuais.

using System;
using System.Runtime.CompilerServices;

public static class Guard
{
  public static void NotNull(object x, [CallerMemberName] string caller = null)
  {
    if (x == null) throw new ArgumentNullException("value", "Null passed by " + (caller ?? "?"));
  }
}

public class Program
{
  static void Save(string path)
  {
    Guard.NotNull(path); // if null, message includes "Save"
    Console.WriteLine("Saving to " + path);
  }

  public static void Main(string[] args)
  {
    try
    {
      Save(null);
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
  }
}

Dicas e observações

Observações:

  • Os atributos do chamador funcionam com parâmetros opcionais que têm valores padrão.
  • Não dependa de caminhos de arquivo exatos para proteger segredos; os caminhos podem revelar pastas.
  • São ótimos para registro em log, diagnósticos e eventos de alteração de propriedades.

Atributo do nome do chamador

Verificação rápida: qual atributo permite que um método obtenha o nome de seu chamador como valor padrão de um parâmetro?

Recapitulação

Recapitulação: adicione CallerMemberName, CallerFilePath e CallerLineNumber a parâmetros opcionais para capturar gratuitamente o contexto do chamador.

Perguntas Frequentes

A aula “Informações no nível do código-fonte (atributos Caller)” é grátis?

Sim — o texto completo de “Informações no nível do código-fonte (atributos Caller)” é 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 3 aulas no total.

O que vou aprender em “Informações no nível do código-fonte (atributos Caller)”?

Use CallerMemberName, CallerFilePath e CallerLineNumber para capturar informações do local da chamada em registros, verificações de proteção e notificações de propriedades. 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 2 de 3.

Quanto tempo leva a aula “Informações no nível do código-fonte (atributos Caller)”?

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. Type, MethodInfo, ativação, atributos personalizados
  2. Informações no nível do código-fonte (atributos Caller)
  3. Cenários de metaprogramação leve
← Voltar para C# Academy