Есть ли между следующим синтаксисом функциональное различие...
[Foo, Bar]
public class Baz {}
... и этот синтаксис?
[Foo]
[Bar]
public class Baz {}
Принятие каждого приводит к идентичным результатам при компиляции, который является предпочтительной формой?
Функциональной разницы нет. Это вопрос удобства и стиля.
Чаще всего я предпочитаю видеть атрибуты на своих собственных строках, чтобы они были разделены и легко читались. Также приятно иметь возможность использовать комментарий строки //
для удаления атрибутов по отдельности.
[A]
[B]
//[C] disabled
public class Foo {}
Я обычно складываю атрибуты. Но я также в основном использую их с WCF, где список параметров может стать довольно большим.
[OperationContract()]
[WebGet(...)]
string MyMethod(string input);
С точки зрения удобочитаемости предпочтительны отдельные атрибуты.
Подумайте о случае, когда вы передаете какой-то тип параметра
[Foo(typeof(int)), Bar(typeof(decimal), MessageTemplate="Bar")]
vs
[Foo(typeof(int))]
[Bar(typeof(decimal), MessageTemplate="Bar")]
Я бы также сказал, что если бы вы могли объединить их в один, они должны быть одним тегом.