Если бы необходимо было решить между C# и Управляемым С++, который Вы выбрали бы и почему?
Есть ли преимущества Управляемого С++ по C#? Какой язык Вы предпочитаете? Какие решения Вы приняли бы при каких обстоятельствах?
Я бы использовал управляемый C++, если бы мне:
И уже иметь некоторые навыки в C++, так как для вышеперечисленных задач потребуется опытный C++ программист. В большинстве случаев я бы рассматривал управляемый C++ только в том случае, если у компании уже есть кодовая база C++, иначе кто будет поддерживать управляемый C++ код.
В других случаях я бы всегда выбирал C#. Даже если бы я выбрал управляемый C++ для части системы, я бы постарался написать как можно больше системы на C#.
Думайте об управляемом C++ как о строительном мосте для перехода между неуправляемым миром C/C++ и управляемым миром .NET.
Если вам нужно вызвать только несколько простых API из C#, то посмотрите pinvoke.net и этот обзор, чтобы узнать, как вызвать их из C#, так как несколько строк сложного кода pinvoke (предварительно построенный мост) на C# обычно лучше, чем внедрение C++ в проект, который еще не использует его.
Я использовал управляемый C ++, когда мне нужно было создать новый компонент NET с большей частью неуправляемого кода C ++ внутри. Я создал специальный класс, используемый для пересылки некоторых объектов вперед и назад из старого кода C ++.
Я бы предпочел C # или, в частности, .NET, а не C ++ из-за обширной стандартной библиотеки .NET.
Управляемый C++ хорош для взаимодействия с C++: например, если у вас есть приложение .NET и ваша сборка должна взаимодействовать с родным интерфейсом, который поставляется в виде C++ .lib файлов (что у меня было не раз), или с хорошим C++ API.
Пример: Rithmic (не то чтобы вы когда-нибудь слышали о них) до недавнего времени поддерживал ТОЛЬКО C++ API. Если вы попытаетесь получить к ним доступ из C# - удачи ;) Управляемый C++ позволяет мне обращаться к их API и открывать красивые объекты .NET.
По сути, interop. Managed C++ РЕАЛЬНО сияет во взаимодействии с низкоуровневыми API C / C++.
Я лично не писал и не читал слишком много строк кода на управляемом C ++, но, судя по тому, что я видел, он выглядит слишком запутанным и неоднородным. Тем не менее, вы можете захотеть использовать управляемый C ++, если вы действительно хорошо разбираетесь в C ++, и изучение идиом и шаблонов нового языка было бы слишком большим риском.
Используйте C #, если вы достаточно компетентны в нем. Если вы только начинаете работать с C ++ и C #, я думаю, что C # - более легкий путь.
Я столкнулся с проблемой, которая была прозрачной в управляемом C ++, но создала большую головную боль в C # - мне пришлось отправить функцию обратного вызова в неуправляемую библиотеку C ++, которая определила этот обратный вызов как __cdecl. В C # соглашение о вызовах по умолчанию - __stdcall, и оно довольно скомпилировано для перемещения делегата C # из __stdcall в __cdecl (на самом деле для этого требуется либо неуправляемая DLL-оболочка с прокладкой, либо использование некоторых классов отражения). В C ++ (а также в C ++. Net) это простой атрибут.
в чем преимущество управляемого C ++ over C #?
C ++. net полезен для взаимодействия с кодом C ++ и C (то есть для вызова внешних библиотек C или C ++, предоставления функций обратного вызова внешним модулям, написанным на C или C ++, и т. д.
на каком языке вы бы оба предпочитаете?
Я бы предпочел C # для всех ситуаций, кроме описанной выше (взаимодействие с C и C ++).
C # проще писать, он проще и специально предназначен для использования платформы .NET. C ++ тоже может это делать, но он имеет всю сложность языка C ++ плюс расширения, необходимые для использования платформы .NET.
Если вам не нужно взаимодействовать с собственным кодом C ++ или C, в большинстве случаев вам лучше использовать C # (то есть, если вы пишете код для платформы .NET).
Обычно я предпочитаю C ++, но когда мне нужно писать код для .NET, он не лучше C #.