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

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

Ответов (15)

Решение

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

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

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

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

Скотт Хансельман недавно написал интересную статью, в которой сравниваются var и Dim: Back to Basics: var! = Dim

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

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

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

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

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

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

С момента выпуска .Net 2.0 у этой темы было много времени. См. Эту статью в Википедии для удобочитаемого резюме.

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

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

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

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

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

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

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

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

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

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

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

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

Хотя VB.NET поддерживает обработку исключений типа try ... catch, он по-прежнему имеет что-то похожее на ON ERROR в VB6. ON ERROR может подвергаться серьезным злоупотреблениям, и в подавляющем большинстве случаев попробуйте ... поймать гораздо лучше; но ON ERROR может быть полезен при обработке операций тайм-аута COM, где ошибка может быть перехвачена, декодирована, а последняя «попытка снова» представляет собой простую одну строку. Вы можете сделать то же самое с помощью try ... catch, но код намного сложнее.

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