
Aplicar el atributo AttributeUsageAttribute
La declaración de un atributo personalizado empieza con el atributo AttributeUsageAttribute, que define algunas de las características clave de la clase de atributo. Por ejemplo, se puede especificar si el atributo puede ser heredado por otras clases o a qué elementos se puede aplicar el atributo. El fragmento de código siguiente muestra cómo se utiliza el atributo AttributeUsageAttribute.
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
<AttributeUsage(AttributeTargets.All, Inherited := False, AllowMultiple := true)>
System..::.AttributeUsageAttribute tiene tres miembros que son importantes para la creación de atributos personalizados: AttributeTargets, Inherited y AllowMultiple.
AttributeTargets (Miembro)
En el ejemplo anterior, se especifica AttributeTargets.All, indicando que este atributo se puede aplicar a todos los elementos de programa. También se puede especificar AttributeTargets.Class, que indica que el atributo puede aplicarse sólo a una clase, o bien AttributeTargets.Method que indica que el atributo puede aplicarse sólo a un método. Todos los elementos de programa pueden ser marcados a efectos de descripción por un atributo personalizado de este modo.
También se pueden pasar varias instancias de AttributeTargets. El fragmento de código siguiente especifica que un atributo personalizado se puede aplicar a cualquier clase o método.
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)]
<AttributeUsage (AttributeTargets.Class Or AttributeTargets.Method)>
Inherited (Propiedad)
La propiedad Inherited indica si el atributo puede ser heredado por clases derivadas de las clases a las que se aplica el atributo. Esta propiedad puede tomar el valor true (valor predeterminado) o false. Por ejemplo, en el siguiente ejemplo de código, MyAttribute tiene el valor predeterminado true para Inherited, mientras que YourAttribute tiene el valor false para esta misma propiedad.
//This defaults to Inherited = true.
public class MyAttribute :Attribute
{
}
[AttributeUsage( Inherited = false)]
public class YourAttribute : Attribute
{
} <AttributeUsage( AttributeTargets.All, Inherited := True)> Public Class _
MyAttribute
Inherits Attribute
End Class
<AttributeUsage( AttributeTargets.All, Inherited := False)> Public Class _
YourAttribute
Inherits Attribute
End Class
Los dos atributos se aplican después a un método de la clase base MyClass.
public class MyClass
{
[MyAttribute]
[YourAttribute]
public virtual void MyMethod()
{
//...
}
}
' In Microsoft Visual Basic, you apply multiple attributes
' by separating them with commas.
Public Class [MyClass]
<MyAttribute, YourAttribute> Public Overridable Sub MyMethod()
'...
End Sub
End Class
Finalmente, la clase YourClass se hereda de la clase base MyClass. El método MyMethod muestra MyAttribute, pero no YourAttribute.
public class YourClass: MyClass
{
//MyMethod will have MyAttribute but not YourAttribute.
public override void MyMethod()
{
//...
}
}
Public Class YourClass
Inherits [MyClass]
'MyMethod will have MyAttribute but not YourAttribute.
Public overrides Sub MyMethod()
'...
End Sub
End Class
AllowMultiple (Propiedad)
La propiedad AllowMultiple indica si pueden existir varias instancias del atributo en un elemento. Si se establece en true, se permiten varias instancias; si se establece en false (valor predeterminado), sólo se permite una instancia.
En el siguiente ejemplo de código, MyAttribute tiene el valor predeterminado false para AllowMultiple, mientras que YourAttribute tiene el valor true.
//This defaults to AllowMultiple = false.
public class MyAttribute :Attribute
{
}
[AttributeUsage(AllowMultiple = true)]
public class YourAttribute : Attribute
{
}
'This defaults to AllowMultiple = false.
<AttributeUsage(AttributeTargets.Method)> Public Class _
MyAttribute
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.Method, AllowMultiple := True)> Public Class _
YourAttribute
Inherits Attribute
End Class
Cuando se aplican varias instancias de estos atributos, MyAttribute genera un error del compilador. El ejemplo de código siguiente muestra un uso válido de YourAttribute y un uso no válido de MyAttribute.
public class MyClass
{
//This produces an error.
//Duplicates are not allowed.
[MyAttribute]
[MyAttribute]
public void MyMethod() {
//...
}
//This is valid.
[YourAttribute]
[YourAttribute]
public void YourMethod(){
//...
}
}
' In Microsoft Visual Basic you apply multiple attributes
' by separating them with commas.
Public Class [MyClass]
'This produces an error.
'Duplicates are not allowed.
<MyAttribute, MyAttribute> Public Overridable Sub MyMethod()
'...
End Sub
'This is valid.
<YourAttribute, YourAttribute> Public Sub YourMethod()
'...
End Sub
End Class
Si las propiedades AllowMultiple e Inherited se establecen ambas en true, una clase heredada de otra puede heredar un atributo y tener aplicada otra instancia del mismo atributo en la misma clase secundaria. Si la propiedad AllowMultiple se establece en false, los valores de los atributos de la clase primaria serán sobrescritos por las instancias nuevas del mismo atributo de la clase secundaria.