c # 4.0 DLR и COM - PullRequest
       53

c # 4.0 DLR и COM

1 голос
/ 18 февраля 2012

общий пример, иллюстрирующий преимущества DLR, - это использование его с устаревшими компонентами, такими как COM, с возможностью вызова методов, которые не видны во время компиляции.

смысл ли пропустить шаг COM Interop? Потому что, как только компонент будет Regasm'd, у компилятора будут метаданные.

и допустим, что мы пропускаем шаг Interop, любые изменения в сигнатуре COM (которая используется .net) все равно требуют повторной компиляции.

Если бы мне пришлось сделать другое предположение, DLR также обеспечивает кэширование вызовов, поэтому любые последующие вызовы должны быть быстрее, чем те, которые используют регулярное отражение ... так что, может быть, это одно из преимуществ DLR здесь ... но синтаксически я просто не вижу этого ..

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

смысл этого пропустить шаг COM Interop?

Нет, это просто упрощает вызов методов, что может быть довольно неприятно с Reflection.Независимо от того, используете ли вы Reflection или C # 4.0 динамический, оба используют Interop для взаимодействия с неуправляемым кодом.

и, скажем, мы пропускаем этап Interop, любые изменения в сигнатуре COM (которые используются.net) все равно потребует перекомпиляции.

Это зависит.Если вы переименуете метод COM, вам нужно будет перекомпилировать вызывающий код .NET, потому что он сломается во время выполнения при попытке вызвать несуществующий метод.

1 голос
/ 18 февраля 2012

Особенно полезно взаимодействовать с поздним COM. Тип, в котором вы не добавляете ссылку на библиотеку типов COM или PIA. Очень больно делать в C # до того, как ключевое слово dynamic стало доступно, для этого требуется код отражения. Если у вас есть библиотека типов, то вы почти всегда хотите использовать ее, поскольку она lot быстрее, распознает ошибки во время компиляции и поддерживает IntelliSense. Единственная причина, по которой вы не захотите его использовать, это то, что вы пытаетесь сделать свой код достаточно гибким для работы с различными версиями COM-сервера. Однако это довольно рискованно с исключением времени выполнения всегда за углом, чтобы испортить ваш день. На самом деле редко бывает иметь библиотеку типов, почти все авторы COM-компонентов предоставляют ее, так как ее преимущества очень велики.

Regasm - полная противоположность, вы используете его только тогда, когда пишете свой собственный [ComVisible] сервер на C #. Тогда нет никакой пользы для динамического .

...