0Pricing
C# Academy · Lektion

Informationen auf Quelltextebene (Caller-Attribute)

Verwenden Sie CallerMemberName, CallerFilePath und CallerLineNumber, um Informationen zur Aufrufstelle für Logs, Guard-Prüfungen und Eigenschaftsbenachrichtigungen zu erfassen.

Informationen auf Quelltextebene (Caller-Attribute) ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Warum Informationen zum Aufrufer

Ziel: Informationen zur Aufrufstelle automatisch erfassen.

  • CallerMemberName — welcher Member den Aufruf ausgelöst hat
  • CallerFilePath — aus welcher Datei
  • CallerLineNumber — aus welcher Zeile
  • Ideal für Protokolle, Guard-Prüfungen und Benachrichtigungen

Membername für Protokolle

CallerMemberName füllt den Methoden- oder Eigenschaftsnamen des Aufrufers automatisch aus, wenn das Argument weggelassen wird.

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

Datei- und Zeileninformationen

Fügen Sie CallerFilePath und CallerLineNumber hinzu, um Diagnosen präzise zuzuordnen.

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

Eigenschaftsbenachrichtigungen

Verwenden Sie CallerMemberName in Settern oder Ereignis-Hilfsmethoden, um fest codierte Zeichenfolgen zu vermeiden.

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

Guard-Prüfungen mit dem Aufrufernamen

Informationen zum Aufrufer machen Guard-Meldungen ohne manuell erstellte Zeichenfolgen verständlicher.

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

Tipps und Hinweise

Hinweise:

  • Aufruferattribute funktionieren mit optionalen Parametern, die Standardwerte besitzen.
  • Verlassen Sie sich bei Geheimnissen nicht auf exakte Dateipfade; Pfade können Ordner offenlegen.
  • Ideal für Protokollierung, Diagnosen und Ereignisse zu Eigenschaftsänderungen.

Attribut für den Aufrufernamen

Kurze Überprüfung: Mit welchem Attribut kann eine Methode den Namen ihres Aufrufers als Standardwert eines Parameters abrufen?

Zusammenfassung

Zusammenfassung: Fügen Sie CallerMemberName, CallerFilePath und CallerLineNumber zu optionalen Parametern hinzu, um den Kontext des Aufrufers ohne zusätzlichen Aufwand zu erfassen.

Häufig gestellte Fragen

Ist die Lektion „Informationen auf Quelltextebene (Caller-Attribute)“ kostenlos?

Ja — der vollständige Text von „Informationen auf Quelltextebene (Caller-Attribute)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Informationen auf Quelltextebene (Caller-Attribute)“?

Verwenden Sie CallerMemberName, CallerFilePath und CallerLineNumber, um Informationen zur Aufrufstelle für Logs, Guard-Prüfungen und Eigenschaftsbenachrichtigungen zu erfassen. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.

Wie lange dauert die Lektion „Informationen auf Quelltextebene (Caller-Attribute)“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Type, MethodInfo, Aktivierung und eigene Attribute
  2. Informationen auf Quelltextebene (Caller-Attribute)
  3. Einfache Metaprogrammierungs-Szenarien
← Zurück zu C# Academy