This document summarizes features introduced in C# 2, including delegates, anonymous methods, and delegate variance. Delegates allow passing methods as arguments and are used for events. C# 2 simplified delegate instantiation and introduced anonymous methods, which define inline delegate code without a named method. Underneath, anonymous methods use compiler-generated classes to capture outer scope variables. Delegate variance allows compatibility between delegate types and instances if their return and parameter types are related through inheritance.