5

パラメータに属性を入れる合理的な使用例のリストを探しています。

メソッド内の属性の適切なケースをいくつか思いつくことができますが、パラメーター属性の適切な使用法が見当たらないようです。教えてください。

メソッドの戻り値の型の属性についてはどうでしょうか。

4

5 に答える 5

7

それらが使用される特定のケースは、PInvoke です。PInvoke シグネチャのパラメーターは、オプションで、属性を使用して追加情報で装飾できるため、個々の引数の PInvoke マーシャリングを明示的に指定するか、デフォルトのマーシャリング動作をオーバーライドすることができます。次に例を示します。

[DllImport("yay.dll")]
public static extern int Bling([MarshalAs(UnmanagedType.LPStr)] string woo);   

これは、文字列引数「woo」のデフォルトのマーシャリング動作をオーバーライドします。

于 2010-06-17T20:29:26.737 に答える
3

たとえば、.NET MVC フレームワークであるVici MVCでは、コントローラーのアクション メソッドのパラメーターを別の名前のパラメーターに "マップ" できます。これは、Vici MVC での実行方法です。

public void ActionMethod([Parameter("user")] int userId)
{

}

これにより、パラメーター「user」がクエリ文字列からパラメーターuserIdにマップされます。

これは、パラメーターに属性を使用する方法の簡単な例です。

于 2010-06-17T20:23:14.137 に答える
1

Boo では、マクロ属性を追加できます。そのような:

def Foo([required]p):
    pass

これは、Foo メソッドを次のように変換するようにコンパイラに指示します。

def Foo(p):
    raise ArgumentNullException("p") if p is null

静的な例とは少し異なりますが、それでも興味深いものです。

于 2010-06-17T20:35:13.187 に答える
1

リフレクションを使用する場合、たとえば、クラスのプロパティに基づいてコード生成を実行する場合など、プロパティに関連付けられたメタデータが必要になる場合があります。

この質問は少しオープンエンドだと思います.遅かれ早かれ必要になる時が来て、言語がそれをサポートしてくれることに感謝するでしょう.

于 2010-06-17T20:20:12.710 に答える
0

他の人が示しているように、何かが良いことは、他の人がそれを使って何をするかによって答えることができます。MEFを開始すると、コンストラクターのパラメーターで使用して、特定の名前の依存関係をインポートすることを指定できます。

public class Foo {
  [ImportingConstructor]
  public Foo([Import("main")] Bar bar) {
    ...
  }
}
于 2010-06-17T20:39:44.177 に答える