Una specie di wrapper si potrebbe utilizzare quando si ha bisogno di un "attributo enumerato"
using System;
public enum FooEnum
{
Foo1,
Foo2
}
public class FooAttribute: Attribute
{
private FooEnum _foo;
public FooEnum Foo
{
get
{
return _foo;
}
}
public FooAttribute(FooEnum foo)
{
_foo = foo;
}
public static readonly FooAttribute Foo1 = new FooAttribute(FooEnum.Foo1);
public static readonly FooAttribute Foo2 = new FooAttribute(FooEnum.Foo2);
}
Da notare i due campi statici e in sola lettura, Foo1 e Foo2, che corrispondono ai valori del tipo enumerato. Fanno la ricerca dell'attributo, più usabile:
IList attributes = typeof(Bar).GetCustomAttributes(false);
if (attributes.Contains(FooAttribute.Foo2))
{
//
}
dove, per esempio, abbiamo:
[Foo(FooEnum.Foo2)]
class Bar
{
//
}
Un esempio nel framework? L'attributo System.ComponentModel.DesignerSerializationVisibilityAttribute.