classes are reference types and structs are value types. Classes are typically used for objects that have a larger memory footprint...
A delegate holds the reference of a method and then called the methods for execution...