Я думаю, это проблематично. Вы вводите связь между двумя классами, которые не связаны.
Рассмотрим следующий код.
public interface IFoo
{
int MethodA();
int MethodB();
}
public class Bar
{
int MethodA();
int MethodB();
}
public class SomeClass
{
int MethodFoo(IFoo someFoo);
}
тогда это должно быть законно?
int blah = someClass.MethodFoo((dynamic<IFoo>)bar);
Это кажется как будто это должно быть законно, потому что компилятор должен иметь возможность динамически печатать bar как нечто, реализующее IFoo.
Однако в этот момент вы связываете IFoo и Bar посредством вызова в совершенно отдельной части вашего кода.
Если вы редактируете Bar, потому что он больше не нуждается в MethodB, вдруг someClass.MethodFood больше не работает, даже если Bar и IFoo не связаны.
Точно так же, если вы добавите MethodC () в IFoo, ваш код снова сломается, даже если IFoo и Bar якобы не связаны.
Дело в том, что, хотя это было бы полезно в некоторых случаях, когда есть сходства между объектами, которые вы не контролируете, есть причина, по которой интерфейсы должны быть явно присоединены к объектам, и причина в том, что компилятор гарантировать, что объект реализует его.