Объединение нескольких атрибутов в C # - PullRequest
34 голосов
/ 30 марта 2010

Есть ли функциональная разница между следующим синтаксисом ...

[Foo, Bar]
public class Baz {}

... а этот синтаксис?

[Foo]
[Bar]
public class Baz {}

Предполагается, что при компиляции каждый из них дает идентичные результаты, какая форма предпочтительнее?

Ответы [ 3 ]

40 голосов
/ 30 марта 2010

Функциональной разницы нет. Это вопрос удобства и стиля.

Чаще всего я склонен рассматривать атрибуты в своих собственных строках как способ разделить их и легко читать. Также приятно иметь возможность использовать комментарий строки // для отдельного удаления атрибутов.

[A]
[B]
//[C] disabled
public class Foo {} 
11 голосов
/ 30 марта 2010

С точки зрения читабельности предпочтительны отдельные атрибуты.

Подумайте о случае, когда вы передаете некоторый тип параметра

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

против

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

Я бы также поспорил, если бы вы могли объединить их в один, они должны быть одним тегом.

2 голосов
/ 30 марта 2010

Я обычно складываю атрибуты. Но я также в основном использую их с WCF, где список параметров может быть довольно большим.

[OperationContract()]
[WebGet(...)]
string MyMethod(string input);
...