Prenez le code suivant:
ICanQuack quack = new Duck();
var map = (object) "a map";
quack.Fly((dynamic)map);
l'utilisation de ces types de
public interface ICanFly
{
void Fly<T>(T map);
}
public interface ICanQuack : ICanFly
{
void Quack();
}
public class Duck : ICanQuack
{
public void Fly<T>(T map)
{
Console.WriteLine("Flying using a {0} map ({1})", typeof (T).Name, map);
}
public void Quack()
{
Console.WriteLine("Quack Quack!");
}
}
Compilé avec C# 5 compilateur contre .NET 4.5.1 (le comportement est probablement la même chose avec l'ancienne compilateur/framework version) cela génère l'erreur suivante:
Maintenant, j'ai une assez bonne idée de ce qui se passe sous les couvertures (j'ai blogué à ce sujet ici) mais je ne peux pas venir avec une réponse satisfaisante pourquoi?