<p>In C#4.0 we're going to get dynamic types, or objects whose "static type is dynamic", according to Anders. This will allow any method invocation resolution to happen at runtime rather than compile time. But will there be facility to bind the dynamic object to some sort of contract (and thereby also get full intellisense for it back), rather than allowing any call on it even if you know that is not likely to be valid.</p>

<p>I.e. instead of just</p>

<pre><code>dynamic foo = GetSomeDynamicObject();
</code></pre>

<p>have the ability to cast or transform it to constrain it to a known contract, such as</p>

<pre><code>IFoo foo2 = foo.To&lt;IFoo&gt;;
</code></pre>

<p>or even just</p>

<pre><code>IFoo foo2 = foo as IFoo;
</code></pre>

<p>Can't find anything like that in the existing materials for C#4.0, but it seems like a logical extension of the dynamic paradigm. Anyone with more info?</p>

I'm not aware of anything really resembling duck typing, I'm afraid. I've
blogged about the idea
, but I don't expect any support. It probably wouldn't be too hard to use Reflection.Emit to make a class which will generate an implementation of any given interface, taking a dynamic object in the constructor and just proxying each call through to it. Not ideal, but it might be a stopgap.