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
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
- Type, MethodInfo, Aktivierung und eigene Attribute
- Informationen auf Quelltextebene (Caller-Attribute)
- Einfache Metaprogrammierungs-Szenarien