Some languages (most notably LISPs) exhibit a characteristic called Homoiconicity, which means that code is data and data is code. This makes a language very powerful because a program can inspect and manipulate itself.
C# isn't a homoiconic language, but using formalized object graphs, it's often possible to formulate a problem in such a way that the program opens itself up for inspection and manipulation - essentially faking Homoiconicity in parts of the code base.
This opens up many powerful options, including easier unit testing, self-documenting systems, run-time changes to program structure, and more.
Loading more stuff…
Hmm…it looks like things are taking a while to load. Try again?