Этот блог проводка может быть полезной для Вас: http://blogs.msdn.com/b/cburrows/archive/2010/04/01/errata-dynamic-conversions-and-overload-resolution.aspx
В частности: «Если у вас есть вызов метода с динамическим аргументом, она отправляется динамически, период.»
Это означает, что C# не знает, какая перегрузка вызывается до выполнения. Он не знает во время компиляции. Мое понимание заключается в том, что даже не проверить, что возможные перегрузки во время компиляции (зачем?), Или обратите внимание на то, что в вашем случае все они возвращают строки.
Так что во время компиляции возвращаемое значение Foo
неизвестно. Таким образом, тип x
определяется во время компиляции dynamic
.
Что делать, если у вас была только одна функция 'Foo', которая возвращает' Hashtable'? Компилятор не знает заранее, что будет возвращаться как возвращаемое значение. В конце концов, вы могли бы сгенерировать реализацию для 'Foo' на лету (во время выполнения). –
@Hamish Grubijan, когда вы вызываете функцию 'Foo', компилятор знает, какая функция вызывается во время компиляции. Попробуйте сделать эту функцию статической, нажмите F12, и она будет непосредственно перейти к правильной функции. –
@ Darin, почему создание статического значения имеет значение? –