Вы можете сохранить свой массив в объекте, который можно назначить для сценариев. Более подробная информация здесь
Я не уверен, говорите ли вы о языковых функциях или приложениях. Мой ответ, однако, для приложений / компонентов.
На самом деле есть только 2 вещи, которые вы не можете делать в C #, которые вы можете делать в C ++.
Наиболее заметный элемент здесь - это драйверы устройств. Это платформа, которая принимает только собственные компоненты, и нет никакого способа подключить управляемый компонент.
Для всего остального можно сделать то же самое в C #, как и в C ++. Есть просто много случаев, когда вы просто не хотите, и нативное решение лучше. Например, можно управлять и манипулировать памятью в C # через небезопасный код или IntPtr. Это просто не так просто и, как правило, нет причин.
В то время как написание расширений оболочки в Windows XP было возможно на C #, почти невозможно написать расширения оболочки для Vista и Windows 7. Расширения оболочки и расширения пространства имен (и все остальное, что использует новую систему свойств) (вроде) должно быть сделано на C ++, если только вы не испытываете боль .
Я думаю, что есть несколько важных моментов:
Вы можете сделать что-нибудь на C # / C ++ / Java / Python / Lisp или почти на любом другом языке, наконец, все они завершены по Тьюрингу ;)
.. Вопрос в том, соответствует ли он вашим потребностям?
На самом деле, большинство настольных приложений: веб-браузеры, текстовые процессоры,
Является ли C # в частности и .NET в целом самокомпилирующимся (это не тролль, я искренне не знаю)? Если нет, вы можете использовать VC ++ для написания C # и .NET, но вы не можете использовать C # для той же работы.
Вы не можете написать драйверы устройства для одного.
С P / Invoke очень мало того, что невозможно в .NET (наиболее очевидно, драйверы устройств).
Есть также советы не использовать .NET (например, расширения оболочки, которые загружаются в любой процесс, открывающий диалоговое окно с файлом 1 ).
Наконец, есть вещи, которые будут намного сложнее в .NET, если вообще возможно (например, создание COM-компонента, который объединяет FTM).
1 Это может создать проблему, если этот процесс уже использует другую версию .NET. Это должно быть смягчено в будущем, когда .NET 4 сможет поддерживать параллельные экземпляры среды выполнения.
Есть два очевидных ответа:
Системные вызовы, однако, не проблема. p / invoke позволяет вам делать это из C # почти так же легко, как из C ++.
Кроссплатформенная разработка. Да, Mono существует, и Java несколько более предсказуем, чтобы он функционировал точно так же на большем количестве платформ, вы можете найти компилятор C / C ++ практически для любой платформы, где вы не можете с C #.
Кроме того, ссылки на сторонние библиотеки, хотя я уверен, что есть способ использовать их в C #, вы сможете использовать их без взаимодействия (Marshaling и т. д.) в C ++.
Редактировать: еще одна вещь: НАДЕЖНОЕ управление памятью. Да, вы можете использовать dispose ()
и try-finally
, но нет ничего лучше, чем ЗНАТЬ, что память уходит, когда она извлекается из стека. Используя такие методы, как RAII, когда вы используете хорошо сконструированные классы, вы будете ЗНАТЬ, когда ваши классы высвобождают ресурсы, и не будут ждать, пока произойдет GC.
dispose ()
и try-finally
, но нет ничего лучше, чем ЗНАТЬ, что память уходит, когда она извлекается из стека. Используя такие методы, как RAII, когда вы используете хорошо сконструированные классы, вы будете ЗНАТЬ, когда ваши классы высвобождают ресурсы, и не будут ждать, пока произойдет GC. И последнее: НАДЕЖНОЕ управление памятью. Да, вы можете использовать dispose ()
и try-finally
, но нет ничего лучше, чем ЗНАТЬ, что память уходит, когда она извлекается из стека. Используя такие методы, как RAII, когда вы используете хорошо сконструированные классы, вы будете ЗНАТЬ, когда ваши классы высвобождают ресурсы, и не будут ждать, пока произойдет GC. Использование инструкций SSE является одним из таких случаев. Некоторые среды выполнения .NET будут использовать некоторые инструкции SSE, в зависимости от вашего кода. Но в VC ++ вы можете использовать встроенные функции SSE напрямую. Так что, если вы пишете мультимедийный код, вы, вероятно, захотите C ++. (C ++ / CLI может также работать, предположительно)
The Main difference is:
C++ is a core language with which you can build stand-alone programs. These Programs communicate directly with the the operating system and nothing else. C++ compilers exist for more or less all platforms (operating systems).
C# is a language that conforms to the CLS. A program written in C# can not start without a CLI engine (.NET Framework, Mono, etc.). A Program written in C# communicates with the .NET framework AND with the operating system. You have a man in the middle. Like all servicing personal, this man can help but it will cause additional trouble. If you want to port, you have a different man in the middle etc. CLI Implementations do not exist for all platforms.
By my opinion every additional framework is a additional source of problems.
Это язык в щеке, но это также ответ на ваш вопрос ... вы можете многое испортить более строго в VC ++, чем вы можете в VC #. Не то, чтобы вам не удавалось серьезно что-то испортить в VC #, но в целом вы можете проще и тщательнее их испортить в VC ++.
Опять-таки, язык в щеке, но также и ответ на ваш вопрос , Возможно, не то, на что вы надеялись, но ...: -)
Есть также сложные приложения в реальном времени. Любой язык с GC не может быть использован, на тот случай, если он решит собирать его во время части кода, ограниченной по времени. Java была печально известна тем, что даже не позволяла вам попробовать (следовательно, EULA об отказе от ее использования для программного обеспечения, «предназначенного для использования при проектировании, строительстве, эксплуатации или обслуживании любого ядерного объекта»
(да, я знаю, что с тех пор сделал модифицированную версию Java для систем реального времени).
Например, имеет смысл использовать C ++, если переводить заголовочные файлы для существующих библиотек сложнее, чем для отказаться от существующих управляемых библиотек.