A programming model that allows flexibility in the behavior of a
program not possible in traditional
API call-based programming.
Custom attributes add
metadata to give
classes extra information that extend the definition of a
data type’s behavior. The attribute’s values are determined by programmers at design time, and can be reconfigured at
runtime by users and other programs without the need for code changes or recompilation.
Also see reflection.