When you annotate a type or method or property with an attribute, what is the compiler/CLR/etc. doing for you?
My guess is that it is "injecting" methods, properties, etc. into your class definitions (or maybe just into your object?, or?) and providing automatic behavior, sort of like how when you declare a delegate with the terse:
public delegate void MySuperSpecialDelegate(myAwesomeClass myAwesomeObject);
you then get some really great automatic behavior that is "injected" into the compiled code (CIL) for you.
So to reiterate the question, what is happening automatically "behind the scenes" when you use attributes?