パラメータに属性を入れる合理的な使用例のリストを探しています。
メソッド内の属性の適切なケースをいくつか思いつくことができますが、パラメーター属性の適切な使用法が見当たらないようです。教えてください。
メソッドの戻り値の型の属性についてはどうでしょうか。
パラメータに属性を入れる合理的な使用例のリストを探しています。
メソッド内の属性の適切なケースをいくつか思いつくことができますが、パラメーター属性の適切な使用法が見当たらないようです。教えてください。
メソッドの戻り値の型の属性についてはどうでしょうか。
それらが使用される特定のケースは、PInvoke です。PInvoke シグネチャのパラメーターは、オプションで、属性を使用して追加情報で装飾できるため、個々の引数の PInvoke マーシャリングを明示的に指定するか、デフォルトのマーシャリング動作をオーバーライドすることができます。次に例を示します。
[DllImport("yay.dll")]
public static extern int Bling([MarshalAs(UnmanagedType.LPStr)] string woo);
これは、文字列引数「woo」のデフォルトのマーシャリング動作をオーバーライドします。
たとえば、.NET MVC フレームワークであるVici MVCでは、コントローラーのアクション メソッドのパラメーターを別の名前のパラメーターに "マップ" できます。これは、Vici MVC での実行方法です。
public void ActionMethod([Parameter("user")] int userId)
{
}
これにより、パラメーター「user」がクエリ文字列からパラメーターuserIdにマップされます。
これは、パラメーターに属性を使用する方法の簡単な例です。
Boo では、マクロ属性を追加できます。そのような:
def Foo([required]p):
pass
これは、Foo メソッドを次のように変換するようにコンパイラに指示します。
def Foo(p):
raise ArgumentNullException("p") if p is null
静的な例とは少し異なりますが、それでも興味深いものです。
リフレクションを使用する場合、たとえば、クラスのプロパティに基づいてコード生成を実行する場合など、プロパティに関連付けられたメタデータが必要になる場合があります。
この質問は少しオープンエンドだと思います.遅かれ早かれ必要になる時が来て、言語がそれをサポートしてくれることに感謝するでしょう.
他の人が示しているように、何かが良いことは、他の人がそれを使って何をするかによって答えることができます。MEFを開始すると、コンストラクターのパラメーターで使用して、特定の名前の依存関係をインポートすることを指定できます。
public class Foo {
[ImportingConstructor]
public Foo([Import("main")] Bar bar) {
...
}
}