Конечно, есть разница в общем синтаксисе, но какие еще существуют важные отличия? Есть некоторые отличия, верно?
Каковы наиболее важные функциональные различия между C # и VB.NET?
Ответы (14)
Связанные сравнения очень обстоятельны, но из основных отличий отмечу следующее:
В C # есть анонимные методыVB теперь тоже естьВ C # есть ключевое слово yield (блоки итераторов)VB11 добавил это- VB поддерживает неявное позднее связывание (C # теперь имеет явное позднее связывание с помощью ключевого слова dynamic)
- VB поддерживает XML-литералы
- VB нечувствителен к регистру
- Больше готовых фрагментов кода для VB
Больше готовых инструментов рефакторинга для C #Visual Studio 2015 теперь предоставляет одни и те же инструменты рефакторинга как для VB, так и для C #.
В общем, то, на чем MS фокусируется для каждого, различается, потому что два языка ориентированы на очень разные аудитории. Это сообщение в блоге содержит хорошее резюме о целевой аудитории. Вероятно, будет хорошей идеей определить, к какой аудитории вы относитесь, потому что это определит, какие инструменты вы получите от Microsoft.
dynamic
. Это по-прежнему отличается от VB.Net: в VB вы разрешаете привязку, включив или отключив Option Strict либо на уровне проекта, либо на уровне файла. В C # поддержка позднего связывания более явна (на уровне оператора) за счет использования ключевого слова dynamic
.
- person jeroenh; 26.08.2010
Yield
. См. Также stackoverflow.com/questions/97381/yield-in-vb-net
- person kodkod; 16.12.2012
Yield
, оно было добавлено в VB 11. Кроме того, C # поддерживает неявное позднее связывание через тип dynamic
(начиная с C # 4); он ведет себя как тип Object
в VB с Option Strict Off. И, наконец, VS 2015 позволяет использовать одни и те же инструменты рефакторинга как для C #, так и для VB.
- person andre_ss6; 08.02.2015
С момента выпуска .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/.
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 по-прежнему не имеет анон-методов, но теперь поддерживает лямбда-выражения.
На мой взгляд, самая большая разница - это возможность писать небезопасный код на C #.
Хотя VB.NET поддерживает обработку исключений типа try ... catch, он по-прежнему имеет что-то похожее на ON ERROR в VB6. ON ERROR может подвергаться серьезным злоупотреблениям, и в подавляющем большинстве случаев попробуйте ... поймать гораздо лучше; но 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/.
Да, VB.NET устранил большинство проблем VB6 и сделал его правильным языком ООП, т.е. По возможностям похож на C #. Хотя я предпочитаю C #, я нахожу старую конструкцию VB ON ERROR полезной для обработки тайм-аутов COM-взаимодействия. Что-то, что нужно использовать с умом - ON ERROR легко злоупотребить !!