Является ли атрибут CallerMemberName в 4.5 "способным подделаться"?

Итак,.NET 4.5 представляет CallerMemberNameAttribute, который кажется удачным для любого, кто работает с WPF и реализует INotifyPropertyChanged - мой вопрос таков: Является ли атрибут внутренне привязанным/поддерживаемым 4.5 5.0, или это скорее синтаксический помощник сахара в среде, так же, как можно было бы подделать Visual Studio, объявив ExtensionAttribute своего собственного, волшебным образом включив синтаксис LINQ?

Изменить: (извините, Джон!) Я предполагаю, что я спрашиваю, можно ли "включить" функциональность CallerMemberNameAttribute в .NET 4.0 посредством повторной декларации атрибута в правильном пространстве имен, подобно тому, как можно "включить" синтаксис запроса LINQ в .NET 2.0 путем правильного объявления класса ExtensionAttribute. Мое сильное подозрение нет, естественно...

Поставьте еще один способ: я хочу знать, могу ли я использовать функциональность CallerMemberName без обновления до .NET 4.5/5

Надеюсь, что более ясно...

NinjaEdit # 2: Соглашения о совместимости версий... недопустимы!

Ответ 1

Да, вы можете, точно так же, как вы могли бы использовать LINQ и .NET 2, как вы сказали. Я использую следующие в проекте .NET 4.0 с компилятором VS2012 с успехом:

namespace System.Runtime.CompilerServices {

    [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
    public sealed class CallerMemberNameAttribute : Attribute {
    }

}

Будьте очень осторожны, чтобы все в проекте использовали VS2012, иначе они будут получать тихие ошибки, потому что CallerMemberNameAttribute ничего не сделал, а null был передан как параметр по умолчанию.

Изменить 2013-06-28: Рассмотрите возможность установки Microsoft.Bcl пакета NuGet, который предоставляет CallerMemberNameAttribute ( и некоторые другие классы из .NET 4.5) для .NET 4 и Silverlight вместо того, чтобы делать это вручную.