*
означает ноль или более предыдущего выражения.
Другими словами, выражение необязательно.
Вы можете определить целое число, подобное этому:
-*[0-9]+
Другими словами, необязательный отрицательный знак, за которым следует одна или несколько цифр.
Это все из моей точки зрения. Ваш опыт может отличаться.
Преимущества .NET:
Недостатки .NET:
Преимущества WIN32:
Кажется, вы уже знаете краткий ответ, но я повторю его здесь для ясности:
Win32: Мощный и полный. Любое задокументированное поведение на платформе Windows можно составить с помощью Win32, но с мощью приходит ответственность и трудности. Там' В нем довольно много тонкостей и трудностей в создании богатого опыта Win32.
.Net: Мощный, но подмножество Win32. .Net предоставляет более чем достаточно возможностей для подавляющего большинства бизнес-приложений и многого другого, но богатый пользовательский интерфейс и конкретные специализированные ситуации просто не существуют в нем, потому что BCL по какой-либо причине не считает, что смысл его поддержать. Самый распространенный пример, с которым я столкнулся, - это возможности пользовательского интерфейса в новых версиях Windows, хотя есть и другие области, где PInvoke может быть полезен. Однако .Net - гораздо более простая модель для понимания и работы с ней, и (по моему опыту) тонкость .net намного менее вероятна, чтобы выстрелить мне в ногу, чем Win32.
Если вы включаете dllimport и PInvoke, тогда я предполагаю, что .Net - разумная альтернатива, которая '
.Net (или части WinForms, в любом случае) находится поверх Win32. Или, другими словами, Win32 использовался для создания компонентов форм .Net. В этом смысле вы можете думать о .Net как о наборе предварительно созданных виджетов win32. Вы также можете думать о .Net как о логическом преемнике MFC.
.Net также имеет возможность напрямую обращаться к Win32 API, когда это необходимо, дает вам сборку мусора, очень хорошую библиотеку классов в BCL и множество хороших языковых функций над C / C ++ в C # и VB.Net
Чтобы получить все это, вы теряете некоторую долю независимости. .Net - это надстройка framework , которая по умолчанию поставляется не со всеми версиями Windows, и поэтому у вас есть дополнительные зависимости, о которых нужно беспокоиться при развертывании. У вас также есть соображения производительности, о которых следует подумать при использовании любого языка сборки мусора высокого уровня, где, казалось бы, простой код может делать намного больше, чем вы ожидаете за кулисами. Это особенно верно для некоторых компонентов winforms.
Это несправедливое сравнение, между ними нет ничего лучше, все зависит от того, чего вы пытаетесь достичь. Для большинства задач разработки .Net очень сложен и может даже иметь лучшую производительность, чем Win32. С другой стороны, .Net может работать даже вне окон, просто посмотрите на Mono. Теперь для разработки драйверов и вещей низкого уровня вам лучше подойдет Win32.
.NET
в вашем вопросе подразумевает C #
или C ++ / CLI
?
.NET
с C ++ / CLI
- это что-то неестественное. С другой стороны, использование C #
с .NET
более удобно, чем с Win32
.
.Net не заменяет Win32. Win32 - это интерфейс уровня ОС, и вы можете думать о .Net как о небольшой среде под ОС или виртуальной машине, которая находится поверх Win32. . Net обеспечивает нейтральность аппаратной архитектуры (не имеет значения, работает ли ваш клиент на Pentium IV, Core 2 Duo, Itanium, 32-битном, 64-битном или другом) .Net предлагает оптимизированный установщик, который понимает эти среды, так что если инструкция говорит «переместить миллион байт», она будет использовать «наиболее оптимизированную» инструкцию перемещения, доступную на платформе.
.Net упрощает некоторые вещи для разработчика: встроенная сборка мусора предотвращает очень распространенную ошибку - забыть освободить память. Интеграция Visual Studio IDE предлагает, пожалуй, лучшую среду разработки из всех когда-либо существовавших. Конечно, быстро создавать прототипы экранов и кода. (Конечно, Visual Studio предлагает многие из тех же преимуществ кодировщику C / C ++, пишущему в Win32 API.)
Но. Net достигает этого за счет производительности. Код должен быть скомпилирован «точно в срок» (JITted) на машине конечного пользователя, прежде чем его можно будет запустить. Инфраструктура .Net занимает от 5 до 15 мегабайт оперативной памяти только для того, чтобы загрузить достаточно кода для выполнения «Hello World». Инфраструктура .Net не будет хорошо работать на машине с частотой ниже 400 МГц или с менее чем 512 МБ ОЗУ (вы можете запустить ее на меньшем, более медленном компьютере, но ее производительность необходимо будет оценивать для каждого приложения отдельно. .)