The following is a sample refactoring solution to an object oriented design
Some OO techniques involved the use of:
#FactoryMethods
#DynamicDispatch (#delegates)
Other:
#yield #return to mimic sequences withot the need to use sequences
#LINQ
#Extension methods