So a little confession, I\'ve never written an attribute class. I understand they serve the purpose of decorating classes with flags or extra functionality possibly.
Attributes are always used with reflection. They are baked into the metadata of the types during compile time and the only way to read them is through reflection. Attributes are used when you want write a type and you want to associate some metadata with it which could be used by consumers of this type.