Introduction
C# 4.0 includes following some great features.
Dynamic Types
C# 4.0 supports dynamic types. This functionality is most useful in dynamic languages that require runtime bindings. Using Dynamic types you can defer the type checking to Runtime

Optional Parameter
Using Optional Parameter, We can avoid creating many overloads of methods by specifying default values of some parameters.

Named Parameter
In C# 4.0, We can call the methods with named parameter

Simplify COM interop
In C# 4.0, We can simplify the COM interop operations using dynamic type and optional parameters..

Variance
Variance is the collective term for covariance and contravariance, two concepts that have been introduced in .NET 4.
From wikipedia:-
covariant - converting from wider (double) to narrower (float).
contravariant - converting from narrower (float) to wider (double)
invariant-Not able to convert
Manager _manager = New Manager();
Employee _employee = _manager;
Here, an object of type Manager has been placed into a variable of type Employee — which is possible because Manager derives from Employee.
However, the same cannot be possible in generics (C# 3.0)
IEnumerable<Manager> _managerList = New IEnumerable<Manager>();
IEnumerable<Employee> _employeeList = _managerList;
In C# 4.0, It is possible because Generics supports Variance.
Conclusion
This tutorial was created to help you understand the new features of C# 4.0. I Hope you have found this tutorial helpful and interesting. This article is same as my original post C# 4.0 new features