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