Каковы наиболее важные функциональные различия между C # и VB.NET?
-
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-взаимодействия.Однако что-то, что нужно использовать с умом - ПО ОШИБКЕ легко злоупотребить!!