Over a million developers have joined DZone.

Hello Caller Info Attributes

DZone's Guide to

Hello Caller Info Attributes

· ·
Free Resource

codeguru - Using Caller Info Attributes in .NET 4.5

When developing complex .NET applications sometimes you need to find out the details about the caller of a method. .NET Framework 4.5 introduces what is known as Caller Info Attributes, a set of attributes that give you the details about a method caller. Caller info attributes can come in handy for tracing, debugging and diagnostic tools or utilities. This article examines what Caller Info Attributes are and how to use them in a .NET application. 

Overview of Caller Info Attributes

Caller Info Attributes are attributes provided by the .NET Framework (System.Runtime.CompilerServices) that give details about the caller of a method. The caller info attributes are applied to a method with the help of optional parameters. These parameters don't take part in the method signature, as far as calling the method is concerned. They simply pass caller information to the code contained inside the method. Caller info attributes are available to C# as well as Visual Basic and are listed below:

Caller Info Attribute

This attribute gives you the name of the caller as a string. For methods, the respective method names are returned whereas for constructors and finalizers strings ".ctor" and "Finalizer" are returned.

This attribute gives you the path and file name of the source file that contains the caller.

This attribute gives you the line number in the source file at which the method is called.

A common use of these attributes will involve logging the information returned by these attributes to some log file or trace.

Using Caller Info Attributes


Caller Info Attributes is one of those little'ish features that you quickly come to love. This makes MVVM IPropertyNotify much less fragile and I love using them in my logging...


Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}