Является ли атрибут 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 вместо того, чтобы делать это вручную.