C# 4.0 introduced several new features to the C# language including dynamic programming, optional and named parameters, and improved support for covariance and contravariance. It also added the ability to invoke members of dynamic objects at runtime instead of compile-time. The .NET Framework 4.0 implemented these language changes and added support for variance in interfaces like IEnumerable and delegates.