I'm interested in the theoretical aspect. What is the need in C# for using Codedom/Reflection or Lambda expressions/expression trees for generating code at runtime in a typical day to day programing scenario? not in specialized cases 

or in other languages like Ruby, why use monkeypatching for adding/modifying classes at runtime?

How this could be an advantage?