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

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

14.08.2008 19:59:40
Я думаю, что отсутствие религиозных дебатов по этому вопросу свидетельствует о том, насколько они похожи. :)
EBGreen 17.08.2008 17:55:51
15 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

32
11.02.2015 01:21:02
VB имеет анонимные функции, только если они возвращают значение. Не существует такой вещи, как анонимный метод. Метод по определению является именованной функцией, которая неявно принимает ссылку на объект.
Jonathan Allen 9.09.2008 08:29:35
VB не имеет ключевого слова yield, которое поддерживает C #
AlwaysAProgrammer 8.05.2010 14:58:33
C # теперь также поддерживает форму позднего связывания через dynamicключевое слово. Это по-прежнему отличается от VB.Net: в VB вы разрешаете связывание, включая или выключая Option Strict на уровне проекта или на уровне файлов. В C # поддержка позднего связывания является более явной (на уровне операторов) благодаря использованию dynamicключевого слова.
jeroenh 26.08.2010 08:12:58
VB.Net теперь имеет Yieldключевое слово. См. Также stackoverflow.com/questions/97381/yield-in-vb-net
kodkod 16.12.2012 16:33:33
Как уже отмечали другие, VB также имеет Yieldключевое слово, оно было добавлено в VB 11. Кроме того, C # поддерживает неявное позднее связывание также через dynamicтип (начиная с C # 4); он ведет себя как Objectтип в VB с Option Strict Off. И, наконец, VS 2015 предоставляет одинаковые инструменты рефакторинга для C # и VB.
andre_ss6 8.02.2015 02:44:12

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

9
14.08.2008 20:02:47

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

3
14.08.2008 20:03:21

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

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

Мое мнение таково, что VB более продуктивен, чем C #, кажется, он всегда впереди с точки зрения инструментов производительности (таких как intelisense), и я бы порекомендовал vb over c # кому-то, кто спрашивает. Конечно, тот, кто знает, что он предпочитает c #, не спросит, и c #, вероятно, является для него правильным выбором.

2
14.08.2008 20:23:49

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

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

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

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

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

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

1
14.08.2008 20:34:32
Вы полностью забыли поддержку XML в VB.
Jonathan Allen 9.09.2008 08:31:17
Ах да, конечно. VB поддерживает встроенный XML - я до сих пор не уверен в преимуществах такого смешивания данных и кода.
Keith 10.09.2008 06:43:02

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

5
15.08.2008 02:44:56
О, это особенность в порядке. Продолжайте, попробуйте отладить кучу кода, где у вас есть intcounter и intCounter, являющиеся двумя разными переменными. Там не должно быть никакой разницы между ними. Чувствительность к регистру - это пережиток тех дней, когда вычислительная мощность была намного дороже (и анализ строки, где «A» <> «a» быстрее, чем выяснение того, что они действительно одинаковы).
David 4.06.2010 18:24:31

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

0
15.08.2008 04:18:07

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

2
17.08.2008 18:21:27

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

0
17.08.2008 18:30:56

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

2
17.08.2008 18:32:08
Жаль, что нет никакого предупреждения, если кто-то пытается использовать такой метод расширения в контексте только для чтения (компилятор копирует значение и передает копию в качестве refпараметра - grr).
supercat 29.01.2013 23:50:37

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

0
18.08.2008 18:08:13

Самым большим отличием на мой взгляд является возможность писать небезопасный код на C #.

1
26.08.2010 20:27:49

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

1
20.12.2010 20:58:55

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

0
3.01.2011 02:10:09

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

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

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

1
14.01.2013 07:01:43