There are 2 cases when a call will be dispatched dynamically:
1: dynamic d = new MyClass();
2: d.Foo();
1: var o = new MyClass();
2: dynamic d = 4;
3: o.Bar(d);
By keeping the rules simple we hope to avoid cases where there is confusion about whether or not a call is dispatched dynamically.