26

したがって、.NET 4.5はCallerMemberNameAttribute、を導入します。これは、WPFを使用して実装している人にとっては天の恵みのようですINotifyPropertyChanged。私の質問は、この属性は4.5 5.0コンパイラによって本質的に結び付けられているか、サポートされているのか、それとも環境による構文上のシュガーヘルパーなのかということです。 、 ExtensionAttributeLINQ構文を魔法のようにオンにして、独自の宣言を行うことでVisual Studioを偽造できるのと同じように?

編集:(申し訳ありませんがJon!). CallerMemberNameAttributeNETでLINQクエリ構文を「有効」にできるのと同じように、適切な名前空間で属性を再宣言することで、.NET4.0の機能を「有効」にできるかどうかを尋ねていると思います。 2.0ExtensionAttributeクラスの適切な宣言による。私の強い疑いは、当然のことながら、いいえです...

さらに別の言い方をすれば、CallerMemberName.NET 4.5/5にアップグレードせずにの機能の恩恵を受けることができるかどうかを知りたい

うまくいけば、それはもっと明確です...

NinjaEdit#2:ため息...バージョン番号の規則は混乱を招きます!

4

1 に答える 1

51

はい、できます。あなたが言ったように、LINQと.NET2を使用するのとまったく同じです。VS2012コンパイラを使用した.NET4.0プロジェクトで、以下を使用して成功しました。

namespace System.Runtime.CompilerServices {

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

}

プロジェクトの全員がVS2012を使用していることに十分注意してください。そうしないと、何も実行せず、パラメーターのデフォルトとして渡されたため、サイレントバグが発生CallerMemberNameAttributeますnull

2013-06-28の編集:手動ではなく、.NET4およびSilverlight用に提供するMicrosoft.BclNuGetパッケージCallerMemberNameAttribute(および.NET 4.5の他のいくつかのクラス)のインストールを検討してください。

于 2012-11-14T15:51:46.460 に答える