Refleksja pozwala programowi inspektować i manipulować typami, metodami i właściwościami w runtime'ie — nawet takimi, które są nieznane w czasie kompilacji. Atrybuty dołączają deklaratywne metadane do kodu, które narzędzia i frameworki odczytują (często za pośrednictwem refleksji), aby sterować zachowaniem. Razem umożliwiają wiele "magii" frameworku .NET (serializacja, wstrzykiwanie zależności, ORMy, walidacja).
