Убедительные разработчики приложений VB6 для перехода на C # - PullRequest
29 голосов
/ 20 октября 2010

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

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

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

Я ответил, что сообщество в значительной степени решило, что C # является подходом для примерно 80% примеров в C #.Я программист VB.Net, и я рад наконец порезаться на C #, однако, поскольку я настолько новичок, я не уверен, что могу ответить на вопрос «почему?»вопрос.У меня больше причин, потому что я хочу изучить это.

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

Ждем ваших отзывов!

Ответы [ 11 ]

25 голосов
/ 20 октября 2010

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

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

Зачем переходить на .NET через VB6:

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

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

  • Никаких новых улучшений в VB6 не вносится.

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

Зачем переходить на C # вместо VB.NET

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

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

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

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

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

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

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

22 голосов
/ 20 октября 2010

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

6 голосов
/ 20 октября 2010

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

C # / VB.NET сравнение

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

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

4 голосов
/ 21 октября 2010

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

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

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

4 голосов
/ 20 октября 2010

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

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

3 голосов
/ 20 октября 2010

причины, по которым разработчики VB6 должны перейти на C #

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

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

Также

  • ReSharper для C # лучше, чем ReSharper для VB.NET
3 голосов
/ 20 октября 2010

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

Быстрый поиск поТАК карьеры:

  • 92 объявления о вакансиях для c #
  • 11 объявлений о вакансиях на vb.net
  • 1 публикация вакансий на vb6
3 голосов
/ 20 октября 2010

Самое большое преимущество C # по сравнению с собственно VB6 - это наследование.

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

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

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

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

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

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

Вопросы по SO:

2 голосов
/ 20 октября 2010

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

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

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

1 голос
/ 21 октября 2010

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

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

...