web-dev-qa-db-ja.com

C#で複数の属性を組み合わせる

次の構文の間に機能的な違いはありますか...

[Foo, Bar]
public class Baz {}

...そしてこの構文?

[Foo]
[Bar]
public class Baz {}

コンパイル時にそれぞれが同じ結果を生成すると仮定すると、どちらが推奨される形式ですか?

35
Brant Bobby

機能的な違いはありません。利便性とスタイルの問題です。

ほとんどの場合、私は属性を分離して読みやすくする方法として、自分の行の属性を見る傾向があります。行コメント//を使用して属性を個別に削除できるのも便利です。

[A]
[B]
//[C] disabled
public class Foo {} 
41
LBushkin

読みやすさの観点から、個別の属性が推奨されます。

あるタイプのパラメーターを渡す場合を考えてください。

 [Foo(typeof(int)), Bar(typeof(decimal), MessageTemplate="Bar")]

versus

 [Foo(typeof(int))]
 [Bar(typeof(decimal), MessageTemplate="Bar")]

また、それらを1つに組み合わせることができれば、1つのタグにする必要があると主張します。

11
Nix

私は通常、属性をスタックします。しかし、私は主に、パラメータリストがかなり大きくなる可能性があるWCFでこれらを使用します。

[OperationContract()]
[WebGet(...)]
string MyMethod(string input);
2
Matthew Whited