There are 2 cases when a call will be dispatched dynamically:
- When the receiver of the call is statically typed as dynamic
1: dynamic d = new MyClass();
- When any of the arguments to the call are statically typed as dynamic
1: var o = new MyClass();
2: dynamic d = 4;
By keeping the rules simple we hope to avoid cases where there is confusion about whether or not a call is dispatched dynamically.