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

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

Я думаю, что отсутствие религиозных дебатов по этому вопросу свидетельствует о том, насколько они похожи. :)

EBGreen 17.08.2008 21:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
33
1
10 104
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

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

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

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

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

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

Ответ принят как подходящий

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

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

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

VB имеет анонимные функции до тех пор, пока они возвращают значение. Анонимного метода не существует. Метод по определению - это именованная функция, которая неявно принимает ссылку на объект.

Jonathan Allen 09.09.2008 12:29

VB не имеет ключевого слова yield, которое поддерживает C#

AlwaysAProgrammer 08.05.2010 18:58

C# теперь также поддерживает форму позднего связывания с помощью ключевого слова dynamic. Это по-прежнему отличается от VB.Net: в VB вы разрешаете привязку, включив или отключив Option Strict либо на уровне проекта, либо на уровне файла. В C# поддержка позднего связывания более явна (на уровне операторов) за счет использования ключевого слова dynamic.

jeroenh 26.08.2010 12:12

VB.Net теперь имеет ключевое слово Yield. См. Также stackoverflow.com/questions/97381/yield-in-vb-net

kodkod 16.12.2012 20:33

Как отмечали другие, VB также имеет ключевое слово Yield, оно было добавлено в VB 11. Кроме того, C# поддерживает неявное позднее связывание через тип dynamic (начиная с C# 4); он ведет себя как тип Object в VB с Option Strict Off. И, наконец, VS 2015 позволяет использовать одни и те же инструменты рефакторинга как для C#, так и для VB.

andre_ss6 08.02.2015 05:44

Привет, andre_ss6, я не уверен, почему твоя правка была отклонена, я хотел принять ее, но 3 придурка ее уже отклонили. Я сейчас сам исправлю.

Luke 11.02.2015 04:17

Кроме синтаксиса, уже не так много. Оба они компилируются в один и тот же 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.

Jonathan Allen 09.09.2008 12:31

Ах да, конечно. VB поддерживает встроенный XML - я все еще не уверен в преимуществах такого смешивания данных и кода.

Keith 10.09.2008 10:43

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

О, это особенность в порядке. Продолжайте, попробуйте отладить кучу кода, где у вас intcounter и intCounter - две разные переменные. Между ними НЕТ разницы. Чувствительность к регистру - это пережиток тех дней, когда вычислительная мощность была намного дороже (и анализ строки, где «A» «a» быстрее, чем выяснение, что они действительно такие же).

David 04.06.2010 22:24

Когда он доходит до 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).

supercat 30.01.2013 03:50

Скотт Хансельман недавно написал интересную статью о контрасте 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

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

Другие вопросы по теме