title: How do attribute classes work?
body: <p>My searches keep turning up only guides explaining how to use and apply attributes to a class.  I want to learn how to create my own attribute classes and the mechanics of how they work.</p>
  
  <p><strong>How are attribute classes instantiated?</strong>  Are they instantiated when the class they are applied to is instantiated?  Is one instantiated for each class instantiated that it is applied to?  E.g. if I apply the SerializableAttribute class to a MyData class, and I instantiate 5 MyData instances, will there be 5 instances of the SerializbleAttribute class created behind the scenes?  Or is there just one instance shared between all of them?</p>
  
  <p><strong>How do attribute class instances access the class they are associated with?</strong>  How does a SerializableAttribute class access the class it is applied to so that it can serialize it's data?  Does it have some sort of SerializableAttribute.ThisIsTheInstanceIAmAppliedTo property? :)   Or does it work in the reverse direction that whenever I serialize something, the Serialize function I pass the MyClass instance to will reflectively go through the Attributes and find the SerialiableAttribute instance?</p>