0Pricing
C# Academy · Lección

Información a nivel de código fuente (atributos Caller)

Use CallerMemberName, CallerFilePath y CallerLineNumber para capturar información del lugar de llamada en logs, validaciones y notificaciones de propiedades.

Información a nivel de código fuente (atributos Caller) es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 3. 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 3 lecciones en total.

Por qué usar la información del llamador

Objetivo: Capture automáticamente información sobre el punto de llamada.

  • CallerMemberName — quién realizó la llamada
  • CallerFilePath — qué archivo
  • CallerLineNumber — qué línea
  • Resulta ideal para registros, guardas y notificaciones

Nombre del miembro para los registros

CallerMemberName completa automáticamente el nombre del método o la propiedad del llamador cuando se omite el argumento.

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

Información del archivo y la línea

Añada CallerFilePath y CallerLineNumber para obtener 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();
  }
}

Notificaciones de propiedades

Use CallerMemberName en setters o auxiliares de eventos para evitar cadenas 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 con el nombre del llamador

La información del llamador hace que los mensajes de las guardas sean más claros sin usar cadenas manuales.

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

Consejos y notas

Notas:

  • Los atributos del llamador funcionan con parámetros opcionales que tienen valores predeterminados.
  • No dependa de rutas de archivo exactas para proteger secretos; las rutas pueden revelar carpetas.
  • Resultan ideales para el registro, los diagnósticos y los eventos de cambio de propiedades.

Atributo del nombre del llamador

Comprobación rápida: ¿Qué atributo permite que un método obtenga el nombre de su llamador como valor predeterminado de un parámetro?

Resumen

Resumen: Añada CallerMemberName, CallerFilePath y CallerLineNumber a parámetros opcionales para capturar sin coste adicional el contexto del llamador.

Preguntas frecuentes

¿La lección «Información a nivel de código fuente (atributos Caller)» es gratis?

Sí — el texto completo de «Información a nivel de código fuente (atributos Caller)» 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 3 lecciones en total.

¿Qué aprenderé en «Información a nivel de código fuente (atributos Caller)»?

Use CallerMemberName, CallerFilePath y CallerLineNumber para capturar información del lugar de llamada en logs, validaciones y notificaciones de propiedades. 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 2 de 3.

¿Cuánto tiempo toma la lección «Información a nivel de código fuente (atributos Caller)»?

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. Type, MethodInfo, activación y atributos personalizados
  2. Información a nivel de código fuente (atributos Caller)
  3. Escenarios de metaprogramación ligera
← Volver a C# Academy