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