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

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


person Larsenal    schedule 14.08.2008    source источник
comment
Я думаю, что отсутствие религиозных дебатов по этому вопросу свидетельствует о том, насколько они похожи. :)   -  person EBGreen    schedule 17.08.2008


Ответы (14)


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

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

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

person Luke    schedule 14.08.2008
comment
VB имеет анонимные функции до тех пор, пока они возвращают значение. Анонимного метода не существует. Метод по определению - это именованная функция, которая неявно принимает ссылку на объект. - person Jonathan Allen; 09.09.2008
comment
VB не имеет ключевого слова yield, которое поддерживает C #. - person AlwaysAProgrammer; 08.05.2010
comment
C # теперь также поддерживает форму позднего связывания с помощью ключевого слова dynamic. Это по-прежнему отличается от VB.Net: в VB вы разрешаете привязку, включив или отключив Option Strict либо на уровне проекта, либо на уровне файла. В C # поддержка позднего связывания более явна (на уровне оператора) за счет использования ключевого слова dynamic. - person jeroenh; 26.08.2010
comment
VB.Net теперь имеет ключевое слово Yield. См. Также stackoverflow.com/questions/97381/yield-in-vb-net - person kodkod; 16.12.2012
comment
Как отмечали другие, VB также имеет ключевое слово Yield, оно было добавлено в VB 11. Кроме того, C # поддерживает неявное позднее связывание через тип dynamic (начиная с C # 4); он ведет себя как тип Object в VB с Option Strict Off. И, наконец, VS 2015 позволяет использовать одни и те же инструменты рефакторинга как для C #, так и для VB. - person andre_ss6; 08.02.2015
comment
Привет, andre_ss6, я не уверен, почему твоя правка была отклонена, я хотел принять ее, но 3 придурка ее уже отклонили. Я сейчас сам исправлю. - person Luke; 11.02.2015

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

person Rob Allen    schedule 14.08.2008

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

person Seibar    schedule 15.08.2008
comment
О, это особенность в порядке. Продолжайте, попробуйте отладить кучу кода, где у вас intcounter и intCounter - две разные переменные. Между ними НЕТ разницы. Чувствительность к регистру - это пережиток тех дней, когда вычислительная мощность была намного дороже (и анализ строки, где A ‹› a, быстрее, чем выяснение, что они действительно такие же). - person David; 04.06.2010

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

person Tom Grochowicz    schedule 14.08.2008

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

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

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

person csmba    schedule 14.08.2008

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

person Community    schedule 17.08.2008

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

person Vaibhav    schedule 17.08.2008
comment
Жаль, что нет предупреждения, если кто-то пытается использовать такой метод расширения в контексте только для чтения (компилятор копирует значение и передает копию как параметр ref - grr). - person supercat; 30.01.2013

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

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

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

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

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

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

person Keith    schedule 14.08.2008
comment
Вы полностью забываете о поддержке XML в VB. - person Jonathan Allen; 09.09.2008
comment
Ах да, конечно. VB поддерживает встроенный XML - я все еще не уверен в преимуществах такого смешивания данных и кода. - person Keith; 10.09.2008

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

person the_lotus    schedule 26.08.2010

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

person winwaed    schedule 20.12.2010

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

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

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

person Durgesh Khandal    schedule 14.01.2013

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

person DevelopingChris    schedule 15.08.2008

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

person Vaibhav    schedule 17.08.2008

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

person winwaed    schedule 03.01.2011