2011-04-01 17 views
9

que tienen una clase personalizada Atributo que define como:C atributo # costumbre nombrar

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] 
public sealed class MyCustomAttribute : System.Attribute 
{ 
    ... 
} 

Desde el sitio web de Microsoft:

Por convención, el nombre de la clase atributo termina con la palabra Atributo. Aunque no es obligatorio, esta convención se recomienda para la legibilidad . Cuando se aplica el atributo , la inclusión de la palabra El atributo es opcional.

Por lo tanto, el atributo puede ser usado por cualquiera

[MyCustom()] 

o

[MyCustomAttribute()] 

Mi pregunta a todos ustedes, es si alguien ha tenido algún problema con el uso de la versión abreviada de la nombre vs el nombre completo? Estoy ejecutando el framework 4.0.

Gracias!

+1

¿Qué tipo de problemas? La pregunta es tipo de respuesta abierta ... – madd0

+0

Debería poder llamar a '[MyCustom]' sin ningún problema (y sin ningún paréntesis) ¿Entonces tiene problemas? Cualquier mensaje de error? –

+3

¡no! Creo que es como preguntar: "¿ha tenido problemas para no comenzar nombres de interfaces con un I?" _ Ha estado funcionando bien durante años ... – gideon

Respuesta

11

Sin problemas.

Debajo de IL compilado, el nombre siempre tiene Atributo adjunto (el nombre de tipo completo).

Basado en ECMA-334 (C# spec) 24.2, la resolución se hace primero por coincidencia exacta, luego agregando "Atributo" al nombre dado en []. Además, si hay un conflicto (por ejemplo, MyAttribute y MyAttributeAttribute) se genera un error de tiempo de compilación cuando se usa "MyAttribute".

+2

+1 y un beso unicornio para detalles de las especificaciones. – gideon

1

No. ¡Muy fácil!

Además, se puede usar sin los vacíos () paréntesis

0

En general, no se debe golpear ningún problema. El compilador de C# es lo suficientemente inteligente como para resolverlo en el tipo correcto en ambos casos.

9

que debería estar bien ... yo sólo te aconsejo no introducir dos atributos con nombres sólo se diferencian por el número de sufijos de atributos:

public class FooAttribute : Attribute { } 

public class FooAttributeAttribute : Attribute { } 

[FooAttribute] // Could be either! 

I sospechoso la coincidencia exacta gustaría ganar aquí , pero por favor no introduzcas la ambigüedad en primer lugar. (No he comprobado la especificación)