Combinar múltiples atributos en C#


Hay una diferencia funcional entre la siguiente sintaxis...

[Foo, Bar]
public class Baz {}

...y esta sintaxis?

[Foo]
[Bar]
public class Baz {}

Suponiendo que cada uno produce resultados idénticos cuando se compila, ¿cuál es la forma preferida?

Author: Brant Bobby, 2010-03-30

3 answers

No hay diferencia funcional. Es una cuestión de conveniencia y estilo.

Muy a menudo, tiendo a ver los atributos en sus propias líneas como una forma de mantenerlos separados y fáciles de leer. También es bueno poder usar la línea comment // para eliminar atributos individualmente.

[A]
[B]
//[C] disabled
public class Foo {} 
 36
Author: LBushkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-30 16:43:27

Desde el punto de vista de la legibilidad se prefieren atributos separados.

Piense en el caso en el que está pasando algún tipo de parámetro

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

Versus

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

También argumentaría, si pudieras combinarlos en uno, deberían ser una etiqueta.

 11
Author: Nix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-24 13:27:17

Normalmente apilo atributos. Pero también los uso principalmente con WCF, donde la lista de parámetros puede ser bastante grande.

[OperationContract()]
[WebGet(...)]
string MyMethod(string input);
 2
Author: Matthew Whited,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-30 16:42:48