2013-03-28 17 views
12

私はASP.NETを学んだし、このメソッドの宣言につまずい:チュートリアルではなく、問題がある(URLから、& ID = 5のように)categoryIdは、文字列「ID」を問い合わせると等しくなります言っC#の関数のパラメータの角括弧構文?

public IQueryable<Product> GetProducts([QueryString("id")] int? categoryId) {.....} 

[QueryString("id")]という構文は何ですか?これはASP.NETの外部で使用できますか?これはどのようなアプリケーションですか?

答えて

15

これは、パラメータcategoryIdに属性を適用しています。この場合

[STAThread] 
static void Main() 
{ 
} 

、フレームワークのおそらくいくつかの部分(私はASPないよ:それはこのように、あなたはおそらくメソッドやクラスを見にもっと慣れているもののように、ただ属性です。 NETの開発者、私は正確に何を指摘することはできません)すべてのメソッドを見つけるために反射を使用して、QueryStringAttributeの値をパラメータに適用し、それらの属性内の名前をクエリ文字列の名前一致する値を抽出してメソッド呼び出しに渡します(再度反射を使用して)。

+0

"属性"とはどういう意味ですか?http://msdn.microsoft.com/en-us/library/z0w1kczw(v=vs.80).aspx この属性はデータの記述に使用されていますか? AFAIK属性は単なるメタデータであり、これはどのようにしてreal valueになり、categoryIdに適用できますか? – 5argon

+0

@Sargon:メタデータです。はい、パラメータ自体に適用されます... ASP.NETは、GetProductsを自動的に呼び出す方法を理解するために、そのメタデータを使用できます。言及する答えを編集します。 –

+1

反射についてのお返事ありがとうございます。あなた自身の属性と反射テクニックを書くことに興味がある人は、私が今読んだページです:http://msdn.microsoft.com/en-us/library/z919e8tw(v=vs.80).aspx – 5argon

関連する問題