Caller Info Attributes (C# 5.0)

Starting with C# 5.0, you can tag optional parameters with one of three caller info attributes, which instruct the compiler to feed information obtained from the caller’s source code into the parameter’s default value:

  • [CallerMemberName] applies the caller’s member name.

  • [CallerFilePath] applies the path to the caller’s source code file.

  • [CallerLineNumber] applies the line number in the caller’s source code file.

The Foo method in the following program demonstrates all three:

using System;
using System.Runtime.CompilerServices;

class Program
{
  static void Main()
  {
    Foo();
  }

  static void Foo (
    [CallerMemberName] string memberName = null,
    [CallerFilePath] string filePath = null,
    [CallerLineNumber] int lineNumber = 0)
  {
    Console.WriteLine (memberName);
    Console.WriteLine (filePath);
    Console.WriteLine (lineNumber);
  }
}

Assuming our program resides in c:source estProgram.cs, the output would be:

Main
c:source	estProgram.cs
8

As with standard optional parameters, the substitution is done at the calling site. Hence, our Main method is syntactic sugar for this:

static void Main()
{
  Foo ("Main", @"c:source	estProgram.cs", 8);
}

Caller info attributes are useful for writing logging functions, and for implementing change notification patterns. For instance, a method such as the following can be called from inside a property’s set accessor—without having to specify the property’s name:

void RaisePropertyChanged (
  [CallerMemberName] string propertyName = null)
  {
    ...
  }
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.144.9.169