Play Inside C# 4.0: dynamic typing, optional parameters, covariance and contravariance