Должен ли я использовать Managed C ++ или C # для моего приложения? - PullRequest
11 голосов
/ 30 июня 2010

Если бы вам пришлось выбирать между C # и Managed C ++, что бы вы выбрали и почему?

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

Ответы [ 7 ]

22 голосов
/ 30 июня 2010

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

  • Необходим для интеграции с существующим кодом 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 ( prebuilt bridge ) в C # обычно лучше, чем вводить C ++ впроект, который еще не использует его.

5 голосов
/ 30 июня 2010

В чем преимущество управляемого C ++ перед C #?

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

на каком языке вы оба предпочитаете?

Я бы предпочел C # для всех ситуаций, кроме описаннойвыше (взаимодействует с C и C ++).

C # легче писать, проще и специально для использования на платформе .NET. C ++ также может делать это, но имеет всю сложность языка C ++ плюсрасширения, необходимые для использования платформы .NET.

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

Обычно я предпочитаю C ++, но когда нужно кодировать для .NET, он не побеждает C #.

4 голосов
/ 30 июня 2010

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

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

В основном взаимодействие. Управляемый C ++ ДЕЙСТВИТЕЛЬНО светится во взаимодействии с низкоуровневыми API C / C ++.

2 голосов
/ 30 июня 2010

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

2 голосов
/ 30 июня 2010

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

1 голос
/ 30 июня 2010

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

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

0 голосов
/ 30 июня 2010

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

...