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

Убедительное наследие разработчиков VB6 для перехода на С#

Я знаю, что этот вопрос может быть похож на других, но на самом деле я ищу причины, по которым разработчикам VB6 следует переключиться на С#.

Моя компания недавно одобрила проект, который будет написан на С#, поэтому у нас много программистов VB.Net, однако у нас есть и некоторые разработчики приложений, которые находятся в VB6. У нас есть временные рамки для повторной записи этих приложений в .Net-приложения. Так что независимо от того, что им придется изучать новые вещи.

Один из разработчиков сегодня специально спросил: "Почему мы должны переключаться на С#?"

Я ответил, что сообщество в значительной степени решило, что С# - это путь, который можно использовать примерно с 80% примеров на С#. Я программист VB.Net, и я очень рад, наконец, сократить свои зубы на С#, однако, будучи тем, что я так новичок, я не уверен, что могу ответить "почему?". вопрос. Мои причины больше, потому что я хочу изучить его.

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

Ждем ваших предложений!

4b9b3361

Ответ 1

Что касается перехода на .NET, лучше поздно, чем никогда! Насколько мне известно, ваш пробег может варьироваться, он стоит каждого пенни, за который вы платите за него!

Я лично считаю, что вы делаете правильный выбор. Первым инстинктом для разработчиков VB является переход на VB.NET. Это звучит вполне разумно, но, на мой взгляд, это неправильный выбор. Вам действительно нужно разбить причины перехода на две категории: зачем переключиться на .NET и зачем переключиться на С#?

Зачем переключаться на .NET поверх VB6:

  • Многопоточность в VB6 технически возможна с точки зрения программирования, но практически невозможна, если вы хотите использовать среду IDE.

  • Я не верю, что вы можете создать 64-битное собственное приложение в VB6. Это очень многое исключает.

  • В VB6 не добавляются новые улучшения.

  • Хорошо, есть много причин, о которых я могу думать, я, вероятно, просто остановлюсь там.

Зачем переключаться на С# вместо VB.NET

  • Разработчики могут быть усыплены ложным чувством знакомого с VB.NET - рассматривая ресурсы, подобные тем, что они делали в VB6, не понимая полных концепций. Пример: вы часто видите, что новые конвертируют объекты VB.NET в объекты Nothing, полагая, что это волшебный способ выпуска ресурсов. Это не так.

  • Верно, что большинство примеров теперь находятся на С#. Что еще более важно, книга Джеффа Рихтера теперь только на С#. Если вы хотите понять, как работает .NET, IMO его книга в значительной степени обязательна.

  • В .NET вы обнаружите, что будете использовать лямбда-выражения все время, особенно при работе с Linq. IMO VB verbosity действительно становится препятствием для понимания и удобочитаемости здесь, способами, где это просто не было раньше: foo.Select(x => x > 50), почти любым стандартом, намного больше свободно и читаемо, чем foo.Select(Function(x) x > 50). Это ухудшается по мере того, как выражения становятся более сложными.

  • Некоторые из худших практик с VB6 невозможны или, по крайней мере, гораздо менее доступны на С# (например, ReDim Preserve и On Error Resume Next).

  • VB привязан к некоторому синтаксису, который делает его довольно громоздким и запутанным для использования при создании библиотек CLR общего назначения. Например, в С# вы используете индексы с скобками []. В VB вы используете parens. Это затрудняет для пользователя подпрограммы возможность определить, является ли он индексом или функцией. Если кто-то пытался использовать вашу библиотеку вне VB, разница была бы важна, но разработчик VB мог бы склоняться к созданию подпрограмм, которые должны быть индексаторами как функции, поскольку они выглядят одинаково.

  • У меня нет данных об этом, но если вы пытаетесь нанять хорошего набора программистов, лучшие из них, как правило, будут менее склонны работать в магазине, который пишет VB.NET над С#. Они, как правило, опасаются, что код, который их коллеги будут генерировать, скорее всего, будет нестандартным .NET-кодом, и пусть будет откровенен здесь - есть стигма против разработчиков VB.NET и качество их кода в сообществе. Там. Я сказал это. Пусть начнется огонь...

Как сноска, с моей точки зрения, VB.NET была настоящей упущенной возможностью для MS. То, что должно было быть, было способом бесшовного преобразования старого кода VB6 в мир .NET - с динамическим вызовом и высококачественным COM-взаимодействием с самого начала. То, что в итоге оказалось, было почти клоном набора функций С# с более подробным синтаксисом и практически без обратной совместимости. Грустно, правда. Он задерживал много организаций из .NET в течение длительного времени. Опять же, может быть, это заставило "холодную индейку" очистить прорыв от прошлого...

Ответ 2

В прошлом я делал много VB6 и много C/С++, и когда произошла большая миграция .NET, я не сомневался, что С# - это путь. Сказав это, ребята из VB6 действительно должны учиться - это .NET, а CLR (правильная объектно-ориентированная среда выполнения, а не тупой COM-интерфейс), а не синтаксис. Сосредоточьтесь на этом и обойдите религиозную войну.

Ответ 3

Это может не ответить на ваш вопрос, на самом деле это может даже противоречить вашему ответу и доказать, что ваш друг прав, но вот хороший список сходств (и различий) между VB.NET и С#:

Сравнение С#/VB.NET

Когда вы перейдете в этот список, вы заметите, насколько похожи оба языка, и с каждой новой версией может быть меньше и меньше причин для переключения. Но, в конце концов, если вы сделаете этот переключатель, статья Википедии в значительной степени суммирует преимущества, которые С# имеет над VB.NET достаточно хорошо:

Статья в Википедии перечисляет преимущества С# над VB и наоборот

Ответ 4

Синтаксис событий VB.net выглядит намного лучше, чем С#; хотя отсутствие каких-либо средств для класса для того, чтобы либо отменить подписку всех обработчиков WithEvents, на которые оно подписано, либо убить все подписи других объектов для своих событий, делает его немного трудным избежать утечек событий, это не хуже, чем С# в этом отношении.

Кроме того, в vb.net можно иметь обработчик в конце, чтобы узнать, какое исключение произошло (если оно есть) в своем блоке Try, не имея на самом деле его поймать. Если в блоке finally есть какие-либо исключения, исходное исключение может быть включено в исключение CleanupFailedException (вместе с другими исключениями, которые произошли в блоке finally). Это похоже на приятное преимущество.

Ответ 5

"Разработчики могут быть усыплены ложным чувством знакомства с VB.NET - обработкой ресурсов, подобных тем, что они делали в VB6, без понимания полных понятий". (@Markle)

Я раньше не использовал это для аргумента, но это очень хороший момент. Когда я подобрал приложение VB.NET, написанное группой программистов VB-new-to-.net, он был усеян старыми вызовами совместимости с старым пространством имен VisualBasic. CStr(), VbNewLine, Mid() и т.д. Работа на языке, который не предназначен для поддержки устаревшего преобразования кода, не позволяет использовать эти реликвии. (Так что удаление ссылки на устаревшее пространство имен, FYI.)

Я переключаюсь между VB.NET и С# довольно регулярно. Всякий раз, когда я перехожу с VB на С#, я думаю: "Это другое, мне потребуется несколько минут, чтобы приспособиться". Всякий раз, когда я перехожу от С# к VB, я думаю: "Это неэффективный язык программирования, там слишком много типизации, как надоедать".

Ответ 6

Самое большое преимущество, с которым С# имеет более VB6, должно быть наследованием.

(ОК, честно говоря, это мой личный фаворит, поэтому я абсолютно предвзятый.)

Другие преимущества:

  • Формальные аксессоры
  • Типы исключений (я не думаю, что у VB6 есть типы исключений, но, пожалуйста, поправьте меня, если я ошибаюсь)
  • Дженерики
  • Лямбда-выражения

И следующие более связаны с платформой .NET, чем сами языки:

  • Очень богатая библиотека.
  • Рефакторинг Visual Studio и другие лакомства

Наконец, аргумент популярности всегда icky (популярный < > хороший), но он дает представление об уровне сообщества каждого и, следовательно, какая помощь доступна там и в какой отрасли идет в целом.

Вопросы по SO:

Ответ 7

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

Быстрый поиск по карьерным темпам SO:

  • 92 публикации вакансий для С#
  • 11 объявлений о вакансиях для vb.net
  • 1 вакансия для vb6

Ответ 8

причины, по которым разработчики VB6 должны переключаться на С#

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

  • Разработчикам С# платят больше, чем разработчикам VB.NET, для того, чтобы сделать точно такое же мышление, просто набрав другой исходный код после этого мышления

Кроме

  • ReSharper для С# лучше, чем ReSharper для VB.NET

Ответ 9

Помимо технических/социальных преимуществ больше ориентировано на бизнес, Основная поддержка VB6 уже закончилась, и расширенная поддержка, которая, несомненно, будет дорогостоящей, скоро закончится. Переход на новую платформу в этом случае создает больше смысла в бизнесе. Кроме того, среда IDE больше не поддерживается микрософт, поэтому в случае возникновения проблемы вы должны быть SOL, а ее установка на блестящем новом ноутбуке может обеспечить непривлекательный опыт.

Обратите внимание, что им не нужно переносить каждое приложение, только осуждайте часть, которая должна быть заменена на com, открытые .Net-сборки.

С другой стороны, имея опыт портирования программного обеспечения с устаревшей платформы на новую, эти ребята будут богаты, если они захотят изучить новую платформу.

Ответ 10

VB6 не полностью объектно ориентирован и не имеет достойного набора коллекций/структур. VB.Net и С# полностью объектно ориентированы и включают в себя достойный набор классов сбора данных в составе .NET..NET 2 также добавил дженерики для еще большей гибкости.

Я бы согласился с теми, кто считает, что VB.Net немного лишний - он исправил проблемы с VB6 и оказался немного "я тоже" вместе с С#. Сказав это, я делаю много COM-взаимодействия и нахожу VB.Net старую модульную конструкцию ON ERROR удобным способом обработки тайм-аутов и повторений функций. Вы можете сделать это с помощью try... catch только это сложнее.

Ответ 11

Вопросы по SO:

[C#]: 116,337
[VB.NET]: 11,740
[VB6]: 1,897

Это ничего не доказывает. VB6 существовал задолго до SO. Все хорошие программисты VB узнали, что им нужно знать, и MSFT покончил с VB6. Большинство новых начинающих MSFT стекались на С# из-за их иррациональной ненависти ко всему, что BASIC (которое все еще выходит - просто посмотрите на Xojo) и, конечно, маркетинг MSFT. Но как они чувствуют себя теперь, когда С# получает короткие изменения по сравнению с С++ на платформе Windows 8? (например, XNA отсутствует). Рынок в значительной степени требует С# над VB.net.