Я должен использовать Управляемый С++ или C# для моего приложения?

Если бы необходимо было решить между C# и Управляемым С++, который Вы выбрали бы и почему?

Есть ли преимущества Управляемого С++ по C#? Какой язык Вы предпочитаете? Какие решения Вы приняли бы при каких обстоятельствах?

11
задан 5 revs, 4 users 80% 9 March 2015 в 21:00
поделиться

7 ответов

Я бы использовал управляемый C++, если бы мне:

  • Нужно интегрироваться с существующим кодом на C/C++
  • Нужно перенести существующий код на C/C++ в .Net
  • Нужно использовать объекты .NET из C++
  • Нужно раскрыть объект . NET объект через COM более сложным способом, чем то, что .net делает легко
  • Нужно получить доступ к аппаратному обеспечению напрямую
  • Нужно вызвать множество неуправляемых API

И уже иметь некоторые навыки в C++, так как для вышеперечисленных задач потребуется опытный C++ программист. В большинстве случаев я бы рассматривал управляемый C++ только в том случае, если у компании уже есть кодовая база C++, иначе кто будет поддерживать управляемый C++ код.

В других случаях я бы всегда выбирал C#. Даже если бы я выбрал управляемый C++ для части системы, я бы постарался написать как можно больше системы на C#.

Думайте об управляемом C++ как о строительном мосте для перехода между неуправляемым миром C/C++ и управляемым миром .NET.

Если вам нужно вызвать только несколько простых API из C#, то посмотрите pinvoke.net и этот обзор, чтобы узнать, как вызвать их из C#, так как несколько строк сложного кода pinvoke (предварительно построенный мост) на C# обычно лучше, чем внедрение C++ в проект, который еще не использует его.

22
ответ дан 3 December 2019 в 01:51
поделиться

Я использовал управляемый C ++, когда мне нужно было создать новый компонент NET с большей частью неуправляемого кода C ++ внутри. Я создал специальный класс, используемый для пересылки некоторых объектов вперед и назад из старого кода C ++.

2
ответ дан 3 December 2019 в 01:51
поделиться

Я бы предпочел C # или, в частности, .NET, а не C ++ из-за обширной стандартной библиотеки .NET.

0
ответ дан 3 December 2019 в 01:51
поделиться

Управляемый C++ хорош для взаимодействия с C++: например, если у вас есть приложение .NET и ваша сборка должна взаимодействовать с родным интерфейсом, который поставляется в виде C++ .lib файлов (что у меня было не раз), или с хорошим C++ API.

Пример: Rithmic (не то чтобы вы когда-нибудь слышали о них) до недавнего времени поддерживал ТОЛЬКО C++ API. Если вы попытаетесь получить к ним доступ из C# - удачи ;) Управляемый C++ позволяет мне обращаться к их API и открывать красивые объекты .NET.

По сути, interop. Managed C++ РЕАЛЬНО сияет во взаимодействии с низкоуровневыми API C / C++.

4
ответ дан 3 December 2019 в 01:51
поделиться

Я лично не писал и не читал слишком много строк кода на управляемом C ++, но, судя по тому, что я видел, он выглядит слишком запутанным и неоднородным. Тем не менее, вы можете захотеть использовать управляемый C ++, если вы действительно хорошо разбираетесь в C ++, и изучение идиом и шаблонов нового языка было бы слишком большим риском.

Используйте C #, если вы достаточно компетентны в нем. Если вы только начинаете работать с C ++ и C #, я думаю, что C # - более легкий путь.

1
ответ дан 3 December 2019 в 01:51
поделиться

Я столкнулся с проблемой, которая была прозрачной в управляемом C ++, но создала большую головную боль в C # - мне пришлось отправить функцию обратного вызова в неуправляемую библиотеку C ++, которая определила этот обратный вызов как __cdecl. В C # соглашение о вызовах по умолчанию - __stdcall, и оно довольно скомпилировано для перемещения делегата C # из __stdcall в __cdecl (на самом деле для этого требуется либо неуправляемая DLL-оболочка с прокладкой, либо использование некоторых классов отражения). В C ++ (а также в C ++. Net) это простой атрибут.

2
ответ дан 3 December 2019 в 01:51
поделиться

в чем преимущество управляемого 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 #.

5
ответ дан 3 December 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: