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