Подтвердить что ты не робот

Должен ли я использовать Managed С++ или С# для моего приложения?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

какой язык вы бы предпочитаешь?

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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