Принципы объектно-ориентированного программирования

         

Подведем итоги



Подведем итоги

Последнее, о чем я хочу сказать, это как различные механизмы работы с унаследованным кодом (PInvoke, небезопасный код и COM Interop) вписываются в общую схему .NET. В этой главе вы узнали следующее. Ш Как пользоваться PInvoke и некоторыми атрибутами, чтобы облегчить решение задач, связанных с преобразованием различных типов данных, включая пользовательские данные, когда применяются стандартные С-подобные вызовы функций.

  • Что касается небезопасного кода, вы узнали, как отказываться от преимуществ управляемого кода в приложениях на С#, оказавшись в ситуации, когда вам требуется больший контроль над памятью. Эти сценарии могут включать случаи, когда вам требуется ручное манипулирование памятью ради повышения эффективности или при перемещении в приложение на С# блоков кода, к преобразованию которого в управляемый код вы просто еще не готовы.
  • Относительно СОМ вы увидели, как задействовать классические компоненты СОМ в приложениях .NET и как COM Interop обеспечивает бесшовное многократное использование существующих компонентов СОМ из управляемого кода. Далее мы бегло ознакомились со способами вызова вашего компонента СОМ с помощью как раннего, так и позднего связывания, а также со способами проверки типов в период выполнения. В завершение вы увидели, как управляемые потоки объявляют о своей принадлежности к тому или иному окружению при вызове компонентов СОМ.

Теперь у вас, как у разработчиков, использующих один из этих механизмов для работы с неуправляемым кодом, может возникнуть вопрос. Продолжать ли применять эти методологии или сразу перейти в мир .NET путем написания всех компонентов и кода прикладной логики в виде управляемых компонентов с помощью такого языка .NET, как С#? Ответ зависит от конкретных обстоятельств.

Если у вас тонны унаследованного кода, будь это С-подобные функции в DLL, код, непосредственно манипулирующий памятью, компоненты СОМ или комбинация всех трех видов кода, за одну ночь вы, по всей вероятности, не сможете конвертировать все это богатство. Тогда имеет смысл задействовать различные механизмы .NET для работы с унаследованным кодом. Если же вы пишете код прикладной логики "с нуля", я бы искренне советовал вам писать его в виде управляемых компонентов на таком языке, как С#. При этом вы покончите с потерями производительности, неизбежно возникающими при переходе границ между управляемым и неуправляемым мирами.



Содержание раздела