.NET: Caller Info Attributes in C# 5.0

Mit Caller Info Attributes können Informationen über den Aufrufer an eine Methode abgerufen werden. Man erhält Dateipfad des Quellcodes, Zeilennummer im Quellcode und Name des Aufrufers. Diese Informationen sind für das Debuggen, die Ablaufverfolgung und das Erstellen von Diagnosetools hilfreich.
Die folgenden Attribute sind verfügbar:

Aufruferinformationen in C# 5

AttributBeschreibungType
CallerMemberNameMethode oder Eigenschaftenname des Aufrufers.String
CallerFilePathAttribute Vollständiger Pfad der Quelldatei, die den Aufrufer enthält. Dies ist der Dateipfad zur Kompilierzeit. String
CallerLineNumberAttributeZeilennummer in der Quelldatei ab, in der die Methode aufgerufen wird.Integer

Nachfolgend ein kleines Beispielprogramm:

Output des oben gezeigten Programs:

GetCallerInfoOutput

Hier nun ein praktisches Beispiel für die Verwendung des CallerMemberName-Attributes. Wer schon einmal mit WPF programmiert hat, kennt das Interface INotifyPropertyChanged. Dies ist innerhalb der WPF-Programmierung ein allgegenwärtiges Interface, mit dem Änderungen z.B. von einem ViewModel zu einem daran gebunden UI Element propagiert werden. Eine typische Implementierung von INotifyPropertyChanged sieht etwa so aus:

INotifyPropertyChanged_StandardImplementation

Problem: Die EventArgs für das PropertyChanged-Event bekommen als Parameter einen String, der dem Namen der Property entspricht. Das bringt das Problem von Verschreibern mit sich und auch beim Umbenennen von Eigenschaften kann leicht vergessen werden den Namen beim Aufruf der OnPropertyChanged-Methode anzupassen. Hier kommt jetzt das CallerMemberName-Attribut zum Einsatz:

INotifyPropertyChanged_CallerMemberName

Durch die Verwendung des CallerMemberName-Attributes muss der Property-Name nun nicht mehr angegeben werden! Somit ist das Risiko von Verschreibern eliminiert und auch das Umbennen von Eigenschaften ist kein Problem mehr! Somit ist der Code wartungsfreundlicher und „robuster“.

Fork me on GitHub