, поскольку другие вопросы в основном освещают, я просто хотел бы быстро прокомментировать ваши соображения:
- Обучение .NET может быть увлекательным и может привести к меньшему количеству кода / первых шагов в более современной среде.
Полностью согласен. Это определенно весело и обычно приводит к меньшему количеству кода. Инвестиции, которые вы делаете сейчас, наверняка принесут вам пользу в будущих проектах. Программирование в .Net намного быстрее, чем в C. Не только это проще, но и безопаснее. Вы изолированы от многих ошибок программирования, распространенных в C, в основном связанных с неправильным использованием памяти. Вы также получаете очень полный управляемый API, чтобы делать то, что обычно требуется для создания собственной инфраструктуры.
- Использование того, что я знаю, приведет к предсказуемому результату с точки зрения усилий и функций (за исключением дополнительного XML-материала)
Отсюда ваша нерешительность. : -)
- VB выглядел великолепно с самого начала, пока не было выполнено около 80% проектов, затем начались боли и кодирование DLL на языке C. Я обеспокоен тем, что история может повториться, если я выберу .Net. Моя основная цель - функциональность. Усилие вызывает беспокойство. Синтаксический анализ XML не является обязательным.
.Net - совершенно другой зверь, чем VB. Большинство вещей, которые вы не сможете сделать в VB, или, по крайней мере, сделать это легко, поддерживаются .Net. Например, Windows Services легко и просто встроить в .Net. Программирование на сокете также поддерживается, но есть несколько причин, чтобы сделать это самостоятельно, поскольку у вас есть множество интерфейсов API с .Net. У вас есть веб-сервисы, .Net Remoting, управление MSMQ и совсем недавно WCF. Правильная многопоточность поддерживается .Net, в отличие от идиотской модели квартиры в VB. Если вам действительно нужно перейти на низкий уровень, вы также можете использовать указатели в C # внутри небезопасных блоков кода, хотя я бы никогда не советовал это делать.
Если вам действительно нужно что-то делать в C, то интеграция также относительно проста. Вы можете создавать COM-объекты и использовать взаимодействие для работы с ними из .Net. Вы также можете напрямую взаимодействовать с обычными людьми с помощью DllImport. Использование www.pinvoke.net облегчает работу.
Когда я разрабатывал в VB, иногда мне приходилось возвращаться к C ++, чтобы делать вещи, которые я не мог делать в VB. С тех пор, как я начал программировать на .Net, единственными крайне редкими сценариями, которые мне нужно было бы возвращать на C ++, были случаи, когда мне нужно было использовать устаревшие компоненты COM, использующие типы, которые мне было трудно маршалировать с помощью взаимодействия. Я не буду беспокоиться о повторении истории.