Каковы наиболее важные функциональные различия между C # и VB.NET?

StackOverflow https://stackoverflow.com/questions/11632

  •  08-06-2019
  •  | 
  •  

Вопрос

Конечно, есть разница в общем синтаксисе, но какие еще важные различия существуют?Есть такие некоторые различия, верно?

Это было полезно?

Решение

Связанные сравнения очень тщательны, но что касается основных различий, я бы отметил следующее:

  • C # имеет анонимные методыТеперь они тоже есть у VB
  • В C # есть ключевое слово yield (блоки итератора).VB11 добавил это
  • Поддержка VB неявная поздняя привязка (Теперь C # имеет явную позднюю привязку с помощью ключевого слова dynamic)
  • VB поддерживает XML-литералы
  • VB не чувствителен к регистру
  • Дополнительные готовые фрагменты кода для VB
  • Дополнительные готовые инструменты рефакторинга для C#Visual Studio 2015 теперь предоставляет одинаковые инструменты рефакторинга как для VB, так и для C #.

В целом, MS фокусируется на каждом из них по-разному, потому что эти два языка ориентированы на очень разные аудитории. Это сообщение в блоге имеет хорошее представление о целевых аудиториях.Вероятно, хорошей идеей будет определить, к какой аудитории вы относитесь, потому что от этого зависит, какие инструменты вы получите от Microsoft.

Другие советы

С момента выхода .Net 2.0 этой теме уделялось много внимания.Видишь это Википедия статья для краткого изложения.

Это можно считать синтаксисом, но VB.NET является регистром вчувствителен, пока в C # используется регистр чувствительный.

Это это очень исчерпывающий справочник.

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

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

Мое мнение таково, что VB более производителен, чем C #, кажется, он всегда впереди с точки зрения инструментов повышения производительности (таких как intelisense), и я бы порекомендовал vb вместо c # тому, кто спросит.Конечно, кто-то, кто знает, что он предпочитает c #, не будет спрашивать, и c #, вероятно, является правильным выбором для него.

Хотя синтаксический сахар на C # 3 действительно продвинул планку вперед, я должен сказать о некоторых элементах Linq to XML в VB.Net кажется довольно приятным и делает обработку сложного, глубоко вложенного XML немного более терпимым.Совсем чуть-чуть.

Одно из вопиющих различий заключается в том, как они обрабатывают методы расширения (Vb.Net на самом деле позволяет то, чего нет в C # - передача типа, для которого определяется метод расширения, как ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/

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

Большинство очевидных различий связаны с синтаксическим сахаром.Например, кажется, что VB поддерживает динамические типы, но на самом деле они такие же статичные, как и C # - компилятор VB вычисляет их.

Visual Studio ведет себя с VB иначе, чем с C # - она скрывает множество функциональных возможностей, но добавляет фоновую компиляцию (отлично подходит для небольших проектов, перегружает ресурсы для больших) и лучшую поддержку фрагментов.

С появлением все большего количества "магии" компилятора в C # 3 VB.Net он действительно отстает.Единственное, что сейчас есть в VB, чего нет в C #, - это handles ключевое слово - и это спорная выгода.

@Tom - это действительно полезно, но немного устарело - VB.Net теперь также поддерживает XML docs с '''

@Luke - VB.Net у него по-прежнему нет анонимных методов, но теперь он поддерживает лямбды.

Самое большое отличие, на мой взгляд, - это возможность писать небезопасный код на C #.

Хотя VB.NET поддерживает обработку исключений типа try ... catch, в нем все еще есть что-то похожее на ошибку VB6.ПО ОШИБКЕ можно серьезно злоупотреблять, и в подавляющем большинстве случаев try ...catch намного лучше;но ON ERROR может быть полезен при обработке операций с тайм-аутом COM, когда ошибка может быть перехвачена, декодирована, а финальное "попробуйте еще раз" состоит из простой одной строки.Вы можете сделать то же самое с помощью try ... catch, но код намного запутаннее.

Эта тема кратко описана в википедии и хардинге.

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

Просто просмотрите и сделайте свои заметки по этому поводу.

Когда дело доходит до IL, все это просто кусочки.Эта нечувствительность к регистру - всего лишь этап предварительной компиляции.Но общее мнение таково, что vb более подробный.Если вы можете писать на c #, почему бы не поберечь свои глаза и руки и не написать меньший объем кода, чтобы сделать то же самое?

Одно из вопиющих различий заключается в том, как они обрабатывают методы расширения (Vb.Net на самом деле позволяет то, чего нет в C # - передача типа, для которого определяется метод расширения, как ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/

Скотт Хансельман недавно написал интересную статью о противопоставлении var и Dim: Вернемся к основам:var != Тусклый

Да VB.NET исправлено большинство проблем с VB6 и сделан правильный язык ООП - ie.Аналогичен по возможностям C#.Хотя я, как правило, предпочитаю C #, я нахожу старую конструкцию VB ON ERROR полезной для обработки тайм-аутов COM-взаимодействия.Однако что-то, что нужно использовать с умом - ПО ОШИБКЕ легко злоупотребить!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top