Динамическое ключевое слово, C # и Interop? - PullRequest
7 голосов
/ 18 мая 2011

Хорошо, я звоню в dll взаимодействия, к которому у меня нет доступа.Вот псевдокод:

dynamic myVariable = null;

firstInteropMethod(ref myVariable);
secondInteropMethod(myVariable); //Not by ref

Сигнатуры методов для двух методов:

firstInteropMethod(ref object someObject);
secondInteropMethod(object someObject);

Ожидаемое значение - двойной массив определения

double[,]

Теперь самое интересное.Мой исходный код дает неправильные результаты, но без ошибок.Однако этот код:

firstInteropMethod(ref myVariable);
secondInteropMethod((double[,]) myVariable);

Дает ожидаемые результаты.

Используя часы и тип операторов, я определил, что ничего не меняется между двумя вызовами, так что же дает?Почему будет разница, и что это будет за разница?

1 Ответ

5 голосов
/ 20 мая 2011

В этой статье MSDN о динамическом объясняется, почему приведение необходимо для COM-взаимодействия, когда операции объявляют тип параметра как object, и указывает, что использование параметра компилятора /link:filelist позволит вам определить метод COM подписи так же динамичны.

...