#if NET20 || NET30 || NET35 || NET40 || !NET_4_6 namespace System.Runtime.CompilerServices { /// /// Allows you to obtain the method or property name of the caller to the method. /// /// /// You apply the CallerMemberName attribute to an optional parameter that has a default value. /// You must specify an explicit default value for the optional parameter. /// You can't apply this attribute to parameters that aren't specified as optional. /// /// You can use the CallerMemberName attribute to avoid specifying the member name as a String argument to the called method. /// By using this technique, you avoid the problem that Rename Refactoring doesn't change the String values. /// This is especially useful for the following tasks: /// /// /// Using tracing and diagnostic routines. /// /// /// Implementing the interface when binding data. /// This interface allows the property of an object to notify a bound control that the property has changed, /// so that the control can display the updated information. /// Without the CallerMemberName attribute, you must specify the property name as a literal. /// /// /// [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] public sealed class CallerMemberNameAttribute : Attribute { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] public CallerMemberNameAttribute() { // Empty // This constructor is not redundant // You cannot put attributes on the default constructor } } } #endif