4.5“中的CallerMemberName属性是否能够伪造”?

时间:2012-11-14 15:33:40

标签: .net wpf .net-4.5

所以.NET 4.5引入了CallerMemberNameAttribute,对于任何使用WPF并实现INotifyPropertyChanged的人来说这似乎是天赐之物 - 我的问题是:该属性是否与内在联系/支持4.5 5.0编译器,或者它更像是环境下的语法糖帮助器,就像人们可以通过声明自己的ExtensionAttribute来伪造Visual Studio,神奇地启用LINQ语法?

编辑:(对不起乔恩!) 我想我是否可以通过在适当的命名空间中重新声明属性来“启用”.NET 4.0中CallerMemberNameAttribute的功能,就像可以在.NET 2.0中“启用”LINQ查询语法一样适当声明ExtensionAttribute类。我的强烈怀疑是不,自然......

换一种方式:我想知道如果不升级到.NET 4.5 / 5,我是否可以从CallerMemberName的功能中受益

希望这更清楚......

NinjaEdit#2:叹息......版本编号惯例令人困惑!

1 个答案:

答案 0 :(得分:50)

是的,就像你说的那样,你可以使用LINQ和.NET 2。我在带有VS2012编译器的.NET 4.0项目中使用以下成功:

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包,它为.NET 4和Silverlight提供CallerMemberNameAttribute(以及.NET 4.5中的一些其他类)而不是手动完成。