Feedback

C# - Attribut: Caller...

Veröffentlicht von am 4/16/2014
(0 Bewertungen)
Ab .NET 4.5 gibt es verschiedene Attribute, welche mit Caller beginnen (siehe [1]). Diese Attribute kann man auf optionale Parameter einer Funktion anwenden. Das hat zur Folge, dass nicht angegebene Parameter mit Informationen über den Aufrufer versehen werden. Dieses Beispiel zeigt so eine einfache Trace-Methode fürs debuggen.

Wo kann man es verwenden?
Einsatzgebiete wären die INotifyPropertyChanged-Schnittstelle (siehe [2]), sodass man OnPropertyChanged() ohne Parameter im Setter aufrufen kann und natürlich für Debugausgaben (siehe Snippet).

Hinweise
Dieses Snippet ähnelt stark dem unter [1] gezeigten Beispiel.
> Es ist nicht einfach kopiert und ich dachte diese Attribute wären ein Snippet wert.
In dem Beispiel unter [2], zur INotifyPropertyChanged Schnittstelle, wurde im .NET 4.5 das CallerMemberName-Attribut verwendet.

Benötigte Namespaces
System.Runtime.CompilerServices - Für die Attribute
System.Diagnostics - Für die Trace-Klasse

Links
[1] http://msdn.microsoft.com/de-de/library/hh534540.aspx
[2] http://msdn.microsoft.com/de-de/library/ms229614.aspx
/// <summary>
/// Schreibt eine Meldung in den Ablaufverfolgungslistener in der <see cref="System.Diagnostics.Trace.Listeners"/>-Auflistung mit Informationen über den Aufrufer.
/// </summary>
/// <param name="msg">Die zu Schreibende Nachricht.</param>
/// <param name="member">Die aufrufende Methode.<para/>Wird diese nicht angegeben, wird sie automatisch ermittelt.</param>
/// <param name="file">Die Datei in der diese Methode aufgerufen wird.<para/>Wird diese nicht angegeben, wird sie automatisch ermittelt.</param>
/// <param name="line">Die Zeile in der diese Methode aufgerufen wird.<para/>Wird diese nicht angegeben, wird diese automatisch ermittelt.</param>
public static void TraceMessage(string msg, [CallerMemberName]string member = null, [CallerFilePath]string file = null, [CallerLineNumber]int line = 0)
{
    Trace.WriteLine(msg);
    Trace.WriteLine(" → member name: " + member);
    Trace.WriteLine(" → source file: " + file);
    Trace.WriteLine(" → line number: " + line);
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!