Возьмите следующий код:
ICanQuack quack = new Duck();
var map = (object) "a map";
quack.Fly((dynamic)map);
с использованием этих типов
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!");
}
}
Скомпилирован с компилятором С# 5 против .NET 4.5.1 (поведение, вероятно, одинаково с использованием более старой версии компилятора/фреймворка), это приводит к следующей ошибке:
Теперь у меня есть довольно хорошая идея , что происходит под обложками (я писал об этом здесь) но я не могу придумать удовлетворительный ответ почему?