Is the CallerMemberName attribute in 4.5 “able to be faked”?

為{幸葍}努か 提交于 2019-12-17 09:35:50

问题


So .NET 4.5 introduces the CallerMemberNameAttribute, which seems like a godsend to anyone working with WPF and implementing INotifyPropertyChanged - my question is this: Is the attribute intrinsically tied/supported by the 4.5 5.0 compiler, or is it more of a syntactical sugar helper by the environment, much like one could fake out Visual Studio by declaring an ExtensionAttribute of your own, magically turning on LINQ syntax?

Edit: (sorry Jon!) I guess I'm asking if one can "enable" the functionality of the CallerMemberNameAttribute in .NET 4.0 via redeclaration of the attribute in the proper namespace, much like one can "enable" LINQ query syntax in .NET 2.0 by proper declaration of the ExtensionAttribute class. My strong suspicion is no, naturally...

Put yet another way: I want to know if I can benefit from the functionality of CallerMemberName without upgrading to .NET 4.5/5

Hopefully that's more clear...

NinjaEdit #2: Sigh...version numbering conventions are confusing!


回答1:


Yes, you can, exactly as you could use LINQ and .NET 2, as you said. I use the following in a .NET 4.0 project with the VS2012 compiler with success:

namespace System.Runtime.CompilerServices {

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

}

Be very careful that everyone on the project is using VS2012, otherwise they'll get silent bugs because CallerMemberNameAttribute didn't do anything and null was passed as the parameter default.

Edit 2013-06-28: Consider installing the Microsoft.Bcl NuGet package that provides CallerMemberNameAttribute (and some other classes from .NET 4.5) for .NET 4 and Silverlight rather than doing it manually.



来源:https://stackoverflow.com/questions/13381917/is-the-callermembername-attribute-in-4-5-able-to-be-faked

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!