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





С момента выпуска .Net 2.0 у этой темы было много времени. См. Статью Википедия для удобочитаемого резюме.
Этот - очень исчерпывающий справочник.
Поскольку я предполагаю, что вы можете использовать Google, я не думаю, что ссылки на другие сайты - это то, что вы ищете.
Мой ответ: Выбирайте базу исходя из истории ваших разработчиков. C# больше похож на JAVA и, вероятно, на C++. VB.NET был проще для программистов VB, но я думаю, это больше не проблема, так как нет новых .NET-программистов, пришедших из старого VB.
Я считаю, что VB более продуктивен, чем C#, кажется, что он всегда впереди с точки зрения инструментов повышения производительности (таких как Intelisense), и я бы порекомендовал vb вместо C# тем, кто спросит. Конечно, тот, кто знает, что предпочитает C#, не спросит, и C#, вероятно, для него правильный выбор.
Связанные сравнения очень подробные, но из основных отличий отмечу следующее:
В общем, то, на чем MS фокусируется для каждого, различается, потому что два языка ориентированы на очень разные аудитории. Это сообщение в блоге имеет хорошее резюме по целевым аудиториям. Вероятно, будет хорошей идеей определить, к какой аудитории вы относитесь, потому что это определит, какие инструменты вы получите от Microsoft.
VB имеет анонимные функции до тех пор, пока они возвращают значение. Анонимного метода не существует. Метод по определению - это именованная функция, которая неявно принимает ссылку на объект.
VB не имеет ключевого слова yield, которое поддерживает C#
C# теперь также поддерживает форму позднего связывания с помощью ключевого слова dynamic. Это по-прежнему отличается от VB.Net: в VB вы разрешаете привязку, включив или отключив Option Strict либо на уровне проекта, либо на уровне файла. В C# поддержка позднего связывания более явна (на уровне операторов) за счет использования ключевого слова dynamic.
VB.Net теперь имеет ключевое слово Yield. См. Также stackoverflow.com/questions/97381/yield-in-vb-net
Как отмечали другие, VB также имеет ключевое слово Yield, оно было добавлено в VB 11. Кроме того, C# поддерживает неявное позднее связывание через тип dynamic (начиная с C# 4); он ведет себя как тип Object в VB с Option Strict Off. И, наконец, VS 2015 позволяет использовать одни и те же инструменты рефакторинга как для C#, так и для VB.
Привет, andre_ss6, я не уверен, почему твоя правка была отклонена, я хотел принять ее, но 3 придурка ее уже отклонили. Я сейчас сам исправлю.
Кроме синтаксиса, уже не так много. Оба они компилируются в один и тот же IL, поэтому вы можете скомпилировать что-нибудь как VB и отразить это в C#.
Большинство очевидных различий - синтаксический сахар. Например, кажется, что VB поддерживает динамические типы, но на самом деле они такие же статические, как и C# - компилятор VB их вычисляет.
Visual Studio ведет себя с VB иначе, чем с C# - он скрывает множество функций, но добавляет фоновую компиляцию (отлично подходит для небольших проектов, чрезмерное использование ресурсов для крупных) и лучшую поддержку фрагментов.
С все большей и большей "магией" компилятора в C# 3 VB.Net действительно отстает. Единственный, что VB теперь, что C# не является handles ключевого слова - и это дискуссионные выгод.
@Tom - это действительно полезно, но немного устарело - VB.Net теперь также поддерживает XML-документы с '''
@Luke - VB.Net по-прежнему не имеет анон-методов, но теперь поддерживает лямбда-выражения.
Вы полностью забываете о поддержке XML в VB.
Ах да, конечно. VB поддерживает встроенный XML - я все еще не уверен в преимуществах такого смешивания данных и кода.
Это можно рассматривать как синтаксис, но VB.NET чувствителен к регистру в, а C# - к регистру чувствительный.
О, это особенность в порядке. Продолжайте, попробуйте отладить кучу кода, где у вас intcounter и intCounter - две разные переменные. Между ними НЕТ разницы. Чувствительность к регистру - это пережиток тех дней, когда вычислительная мощность была намного дороже (и анализ строки, где «A» «a» быстрее, чем выяснение, что они действительно такие же).
Когда он доходит до IL, все это просто биты. Эта нечувствительность к регистру - это просто проход прекомпилятора. Но по общему мнению, vb более подробный. Если вы умеете писать на C#, почему бы не сэкономить глаза и руки и не написать меньший объем кода, чтобы сделать то же самое.
Хотя синтаксический сахар в C# 3 действительно подтолкнул планку вперед, я должен сказать, что некоторые вещи Linq to XML в VB.Net кажутся довольно хорошими и делают обработку сложного, глубоко вложенного XML немного более терпимым. Только немного.
Одно вопиющее различие заключается в том, как они обрабатывают методы расширения (Vb.Net фактически допускает то, чего не делает C# - передача типа, для которого метод расширения определяется как ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/
Одно вопиющее различие заключается в том, как они обрабатывают методы расширения (Vb.Net фактически допускает то, чего не делает C# - передача типа, для которого метод расширения определяется как ref): http://blog.gadodia.net/extension-methods-in-vbnet-and-c/
Жаль, что нет предупреждения, если кто-то пытается использовать такой метод расширения в контексте только для чтения (компилятор копирует значение и передает копию как параметр ref - grr).
Скотт Хансельман недавно написал интересную статью о контрасте var и Dim: Назад к основам: var! = Dim
На мой взгляд, самая большая разница - это возможность писать небезопасный код на 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 легко злоупотребить !!
Эта тема кратко описана в википедии и хардинге.
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
Просто пройдите и сделайте заметки по этому поводу.
Я думаю, что отсутствие религиозных дебатов по этому вопросу свидетельствует о том, насколько они похожи. :)