Текст из этого сообщения об ошибке мой, и история в том, что вы не можете смешивать типы указателей и динамическую отправку, точку.Почему?
Основная причина в том, что указатели не могут быть упакованы.Тот факт, что они не могут быть использованы в качестве аргументов типа, является чем-то вроде красной сельди, поскольку у нас все в порядке с типами «ref» в качестве динамических аргументов, и они также не могут использоваться в качестве аргументов типа.Компилятор испускает новые типы делегатов для работы с типами ref, и он, вероятно, мог бы сделать это для генерации кода в вашей сборке, который создает сайт вызова для сигнатуры с параметрами типа указателя.
Но вернемся к проблеме.Поскольку указатели не могут быть упакованы, у вас никогда не будет значения указателя в «динамическом», что означает, что вы никогда не сможете динамически распределить указатель.Кроме того, поскольку возвращаемые значения из динамических вызовов упакованы, вы не можете динамически отправить функцию, которая возвращает указатель.
И, таким образом, в одном отношении вы можете думать об этом как об одном из тех решений, которые упрощают проблему дляПользователь.Это немного сложно сказать, хорошо, вот несколько вещей, которые вы можете сделать с указателями и динамикой, и есть некоторые вещи, с которыми вы могли бы сойти с рук некоторое время, поэтому постарайтесь держать их прямо.Гораздо проще сказать (и запомнить) «вообще нет указателей с динамикой».
Есть еще одна проблема, о которой я должен признать, что моя память немного размыта.Даже если бы мы позволили вам сделать это, DLR должен был бы разрешить это.И когда мы внедряли C # 4.0, DLR была движущейся целью, что означало, что DLR и среда выполнения C # действительно были движущимися целями.В разные моменты любой из этих компонентов пытался блокировать аргументы по разным причинам.Я не могу вспомнить, что мы отправили и происходит ли это до сих пор, но, во всяком случае, по крайней мере, в какой-то момент времени это было соображением.
Оказывается, «указатели иногда с динамикой» - это особенность, которую делали различные вовлеченные командыНе думаю, что это был очень высокий приоритет.Что, конечно, не означает, что мы думали, что небезопасный код в целом не имеет высокого приоритета.
РЕДАКТИРОВАТЬ: Я не могу найти упоминания об этом в спецификации языка.Это ошибка спецификации.Я прослежу, чтобы об этом сообщили.
РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: https://connect.microsoft.com/VisualStudio/feedback/details/653347/c-language-spec-ommission-cannot-mix-pointer-types-with-dynamic-dispatch